Enviar búsqueda
Cargar
SQLアンチパターン - ジェイウォーク
•
29 recomendaciones
•
31,318 vistas
ke-m kamekoopa
Seguir
社内勉強会資料
Leer menos
Leer más
Tecnología
Denunciar
Compartir
Denunciar
Compartir
1 de 30
Descargar ahora
Descargar para leer sin conexión
Recomendados
SQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリー
ke-m kamekoopa
Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?
Takayuki Shimizukawa
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
SQLアンチパターン(インデックスショットガン)
SQLアンチパターン(インデックスショットガン)
Tomoaki Uchida
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
Recomendados
SQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリー
ke-m kamekoopa
Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?
Takayuki Shimizukawa
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
SQLアンチパターン(インデックスショットガン)
SQLアンチパターン(インデックスショットガン)
Tomoaki Uchida
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
こわくない Git
こわくない Git
Kota Saito
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Mikiya Okuno
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Takafumi ONAKA
例外設計における大罪
例外設計における大罪
Takuto Wada
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?
Yoshitaka Kawashima
PostgreSQLアンチパターン
PostgreSQLアンチパターン
Soudai Sone
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
Koichiro Matsuoka
SQLアンチパターン メンター用資料
SQLアンチパターン メンター用資料
Hironori Miura
目grep入門 +解説
目grep入門 +解説
murachue
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
Kvwatcher
Kvwatcher
ke-m kamekoopa
PyKon JP 2014
PyKon JP 2014
ke-m kamekoopa
Más contenido relacionado
La actualidad más candente
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
こわくない Git
こわくない Git
Kota Saito
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Mikiya Okuno
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Takafumi ONAKA
例外設計における大罪
例外設計における大罪
Takuto Wada
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?
Yoshitaka Kawashima
PostgreSQLアンチパターン
PostgreSQLアンチパターン
Soudai Sone
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
Koichiro Matsuoka
SQLアンチパターン メンター用資料
SQLアンチパターン メンター用資料
Hironori Miura
目grep入門 +解説
目grep入門 +解説
murachue
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
La actualidad más candente
(20)
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
こわくない Git
こわくない Git
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
例外設計における大罪
例外設計における大罪
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
なぜデータモデリングが重要なのか?
なぜデータモデリングが重要なのか?
PostgreSQLアンチパターン
PostgreSQLアンチパターン
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
ドメイン駆動設計のプラクティスでカバーできること、できないこと[DDD]
SQLアンチパターン メンター用資料
SQLアンチパターン メンター用資料
目grep入門 +解説
目grep入門 +解説
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Más de ke-m kamekoopa
Kvwatcher
Kvwatcher
ke-m kamekoopa
PyKon JP 2014
PyKon JP 2014
ke-m kamekoopa
Scala.js
Scala.js
ke-m kamekoopa
設計してますか?
設計してますか?
ke-m kamekoopa
Interlli jとplayとjavaとscala
Interlli jとplayとjavaとscala
ke-m kamekoopa
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
ke-m kamekoopa
デプロイツールFabric
デプロイツールFabric
ke-m kamekoopa
Playで作るwebsocketサーバ
Playで作るwebsocketサーバ
ke-m kamekoopa
ぎっとの「ぎ」
ぎっとの「ぎ」
ke-m kamekoopa
# Rabbitサンプル
# Rabbitサンプル
ke-m kamekoopa
デプロイメントパイプラインって何?
デプロイメントパイプラインって何?
ke-m kamekoopa
継続的にデリバリーって何?
継続的にデリバリーって何?
ke-m kamekoopa
Play frameworkをエヴァンジェる
Play frameworkをエヴァンジェる
ke-m kamekoopa
Php5.4
Php5.4
ke-m kamekoopa
Test
Test
ke-m kamekoopa
Más de ke-m kamekoopa
(15)
Kvwatcher
Kvwatcher
PyKon JP 2014
PyKon JP 2014
Scala.js
Scala.js
設計してますか?
設計してますか?
Interlli jとplayとjavaとscala
Interlli jとplayとjavaとscala
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
デプロイツールFabric
デプロイツールFabric
Playで作るwebsocketサーバ
Playで作るwebsocketサーバ
ぎっとの「ぎ」
ぎっとの「ぎ」
# Rabbitサンプル
# Rabbitサンプル
デプロイメントパイプラインって何?
デプロイメントパイプラインって何?
継続的にデリバリーって何?
継続的にデリバリーって何?
Play frameworkをエヴァンジェる
Play frameworkをエヴァンジェる
Php5.4
Php5.4
Test
Test
Último
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Último
(7)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
SQLアンチパターン - ジェイウォーク
1.
ジェイウォーク SQLアンチパターンその1 信 号 無
視
2.
ジェイウォーク is 単一列に複数の値を格納するSQLアンチパターン
3.
シナリオ A「ブログに、共同編集機能付けたいんよ」 B「はい」
A「今一人しか編集できないじゃん?」 B「ですね」 A「複数人がいじれるように出来ない?」 B「考えてみます」
4.
シナリオ B「今のテーブル定義こんな感じだから」 id title
author_id 1 俺のブログ 10000 2 私のブログ 20000
5.
シナリオ B「要はauthorをn人に出来ればいい訳で」 id title
author_id 1 俺のブログ 10000 2 私のブログ 20000
6.
シナリオ B「こうすればいいか」 id title
author_id 1 俺のブログ 10000,10001,10002 2 私のブログ 20000,10001,10002
7.
シナリオ B「こうすればいいか」 id title
author_id 1 俺のブログ 10000,10001,10002 2 私のブログ 20000,10001,10002 信 号 無 視 ジェイウォーク
8.
Bの主張 既存のテーブル定義でそのまま実現可能で すしお手軽ですよね 挿入も文字列連結するだけだし、実装コス トも低いですしね。
9.
Bの主張 既存のテーブル定義でそのまま実現可能で すしお手軽ですよね データの妥当性の担保は?
挿入も文字列連結するだけだし、実装コス トも低いですしね。 検索は?更新は?削除は?
10.
ジェイウォーク選択のデメリット 効率的な検索が出来なくなる あるユーザが編集権を持っているブログは?
あるブログの編集権があるユーザ情報は? 正規表現? パターンマッチ(like)? いずれにせよindexが効かなくなる → 死
11.
ジェイウォーク選択のデメリット 更新がつらい あるユーザのみ編集権を削除するには?
参照 アプリ側でsplit 削除IDの検索、リストから削除 再更新
12.
ジェイウォーク選択のデメリット 1,2,3
13.
ジェイウォーク選択のデメリット 1,2,3 1 2
3 split
14.
ジェイウォーク選択のデメリット 1,2,3 1 2
3 1 3 split remove
15.
ジェイウォーク選択のデメリット 1,2,3 1 2
3 1 3 1,2 split remove implode
16.
ジェイウォーク選択のデメリット 1,2,3 1 2
3 1 3 1,2 split remove implode だるい
17.
ジェイウォーク選択のデメリット 参照整合性の維持もできないですし。
18.
ジェイウォーク選択のデメリット 共同編集者の最大人数は何人ですか? author_idカラムの定義に依存します!
varchar(128)に保存できる限り保存できます! idが若い(桁数が少ない)と沢山保存できますが 老番(桁数が多い)だとあまり保存できません!
19.
ジェイウォーク選択のデメリット まとめ 参照が死ぬ
更新が死ぬ 妥当性検査、参照整合性が死ぬ 仕様変更で死ぬ
20.
B「僕は…どうしたらよかったんだ…」
21.
解決策 交差テーブルを使いましょう 2つのテーブルを参照する外部キーを持つテー ブルのこと
blogテーブルとusersテーブルの間にもう一つ テーブルを作る
22.
解決策 id title 1 俺のブログ 2
私のブログ blog_id user_id 1 10000 1 10001 1 10002 2 20000 2 10001 2 10002 id name 10000 太郎 10001 一郎 10002 二郎 20000 n郎 これ PK blogs usersauthors
23.
解決策 : 交差テーブル
参照で死なない シンプルなクエリ、indexも利用できる 集約関数も利用できる(countとか) 更新で死なない 素直にupdate, insert, deleteするだけ 妥当性検査、参照整合性で死なない カラムの型、外部キー制約 最大編集人数とかにも変な制約はつかない アプリで制約するのもblog_idでcountするだけ
24.
解決策 : 交差テーブル id
title 1 俺のブログ 2 私のブログ blog_id user_id 1 10000 1 10001 1 10002 2 20000 2 10001 2 10002 id name 10000 太郎 10001 一郎 10002 二郎 20000 n郎 blogs usersauthors 「俺のブログ」の編集者の名前
25.
解決策 : 交差テーブル id
title 1 俺のブログ 2 私のブログ blog_id user_id 1 10000 1 10001 1 10002 2 20000 2 10001 2 10002 id name 10000 太郎 10001 一郎 10002 二郎 20000 n郎 blogs usersauthors 「一郎」が編集しているブログ
26.
解決策 : 交差テーブル id
title 1 俺のブログ 2 私のブログ blog_id user_id 1 10000 1 10001 1 10002 2 20000 2 10001 2 10002 id name 10000 太郎 10001 一郎 10002 二郎 20000 n郎 blogs usersauthors 「俺のブログ」から「二郎」を外す
27.
シンプル!
28.
ジェイウォーク(信号無視) jaywalk 【自動】〈話〉
〔交通規則を無視して〕道路を横断する、横断 歩道のないところを横切る ◆【語源】jay(不注意な人)から。 交差点(交差テーブル)を避ける所から命名 面倒だからと信号無視をせず、交差点を ちゃんと渡りましょう。
29.
アンチパターンを用いていい場合 リストの各要素への個別アクセスが存在し ない、かつパフォーマンスの為にあえて非 正規化を選択する場合 個別要素へのアクセスがなければ検索性は犠牲 にしても問題ない
csvが欲しい等の場合、最初からカンマ区切り にしておいた方が効率が良い
30.
おわり
Descargar ahora