Suche senden
Hochladen
SQLアンチパターン - ジェイウォーク
•
29 gefällt mir
•
31,338 views
ke-m kamekoopa
Folgen
社内勉強会資料
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 30
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
SQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリー
ke-m kamekoopa
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法
yoku0825
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
Empfohlen
SQLアンチパターン - ナイーブツリー
SQLアンチパターン - ナイーブツリー
ke-m kamekoopa
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
MySQLで論理削除と正しく付き合う方法
MySQLで論理削除と正しく付き合う方法
yoku0825
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
yoku0825
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
Koichiro Matsuoka
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
SQLチューニング入門 入門編
SQLチューニング入門 入門編
Miki Shimogai
やってはいけない空振りDelete
やってはいけない空振りDelete
Yu Yamada
日本語テストメソッドについて
日本語テストメソッドについて
kumake
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
Akihiro Suda
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Mikiya Okuno
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
PostgreSQLアンチパターン
PostgreSQLアンチパターン
Soudai Sone
例外設計における大罪
例外設計における大罪
Takuto Wada
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
Miki Shimogai
A5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えします
ester41
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
20160526 依存関係逆転の原則
20160526 依存関係逆転の原則
bonjin6770 Kurosawa
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
データベース設計徹底指南
データベース設計徹底指南
Mikiya Okuno
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
Kvwatcher
Kvwatcher
ke-m kamekoopa
PyKon JP 2014
PyKon JP 2014
ke-m kamekoopa
Weitere ähnliche Inhalte
Was ist angesagt?
SQLチューニング入門 入門編
SQLチューニング入門 入門編
Miki Shimogai
やってはいけない空振りDelete
やってはいけない空振りDelete
Yu Yamada
日本語テストメソッドについて
日本語テストメソッドについて
kumake
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
Akihiro Suda
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
Mikiya Okuno
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
PostgreSQLアンチパターン
PostgreSQLアンチパターン
Soudai Sone
例外設計における大罪
例外設計における大罪
Takuto Wada
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
Miki Shimogai
A5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えします
ester41
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
20160526 依存関係逆転の原則
20160526 依存関係逆転の原則
bonjin6770 Kurosawa
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Kazuhiro Suga
Redisの特徴と活用方法について
Redisの特徴と活用方法について
Yuji Otani
データベース設計徹底指南
データベース設計徹底指南
Mikiya Okuno
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
Was ist angesagt?
(20)
SQLチューニング入門 入門編
SQLチューニング入門 入門編
やってはいけない空振りDelete
やってはいけない空振りDelete
日本語テストメソッドについて
日本語テストメソッドについて
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
オブジェクト指向できていますか?
オブジェクト指向できていますか?
PostgreSQLアンチパターン
PostgreSQLアンチパターン
例外設計における大罪
例外設計における大罪
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
A5 SQL Mk-2の便利な機能をお教えします
A5 SQL Mk-2の便利な機能をお教えします
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
20160526 依存関係逆転の原則
20160526 依存関係逆転の原則
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
DockerコンテナでGitを使う
DockerコンテナでGitを使う
Redisの特徴と活用方法について
Redisの特徴と活用方法について
データベース設計徹底指南
データベース設計徹底指南
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Mehr von 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
Mehr von 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
Kürzlich hochgeladen
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
sn679259
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
CRI Japan, Inc.
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
WSO2
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
atsushi061452
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
Toru Tamaki
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
CRI Japan, Inc.
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
Toru Tamaki
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
iPride Co., Ltd.
Kürzlich hochgeladen
(10)
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
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.
おわり
Jetzt herunterladen