Submit Search
Upload
Sqlアンチパターン読書会 #7スライド資料
•
1 like
•
2,890 views
Naoya Ishii
Follow
Report
Share
Report
Share
1 of 18
Download now
Download to read offline
Recommended
2016年第二回プレ卒研in山口研
2016年第二回プレ卒研in山口研
dmcc2015
でぶさみ夏2013 キーノート オレンジレンジャーの資料
でぶさみ夏2013 キーノート オレンジレンジャーの資料
Tomohiro Fujii
国産業務PaaSを担いで稼ぐ方法 ~SIerの生き残る道の1つとなるか? ~
国産業務PaaSを担いで稼ぐ方法 ~SIerの生き残る道の1つとなるか? ~
SPIRAL Inc.
DevOps at ChatWork
DevOps at ChatWork
Masaki Yamamoto
夏サミ 2013 A2 セッション資料 #natsumiA2
夏サミ 2013 A2 セッション資料 #natsumiA2
智治 長沢
夏サミ 2013 基調講演 長沢パート資料 #natsumiS1
夏サミ 2013 基調講演 長沢パート資料 #natsumiS1
智治 長沢
Devsumi summer 2013_b2_share
Devsumi summer 2013_b2_share
グロースエクスパートナーズ株式会社/Growth xPartners Incorporated.
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
Serverworks Co.,Ltd.
Recommended
2016年第二回プレ卒研in山口研
2016年第二回プレ卒研in山口研
dmcc2015
でぶさみ夏2013 キーノート オレンジレンジャーの資料
でぶさみ夏2013 キーノート オレンジレンジャーの資料
Tomohiro Fujii
国産業務PaaSを担いで稼ぐ方法 ~SIerの生き残る道の1つとなるか? ~
国産業務PaaSを担いで稼ぐ方法 ~SIerの生き残る道の1つとなるか? ~
SPIRAL Inc.
DevOps at ChatWork
DevOps at ChatWork
Masaki Yamamoto
夏サミ 2013 A2 セッション資料 #natsumiA2
夏サミ 2013 A2 セッション資料 #natsumiA2
智治 長沢
夏サミ 2013 基調講演 長沢パート資料 #natsumiS1
夏サミ 2013 基調講演 長沢パート資料 #natsumiS1
智治 長沢
Devsumi summer 2013_b2_share
Devsumi summer 2013_b2_share
グロースエクスパートナーズ株式会社/Growth xPartners Incorporated.
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
2013年08月 夏サミ2013-A5「DevOpsってどうなのよ?」
Serverworks Co.,Ltd.
SQLアンチパターン読書会 「スパゲッティクエリ」
SQLアンチパターン読書会 「スパゲッティクエリ」
makopi 23
夏サミ2013 基調講演 「DevOpsは開発現場とビジネスの間に何を生むか?」(新野淳一氏)
夏サミ2013 基調講演 「DevOpsは開発現場とビジネスの間に何を生むか?」(新野淳一氏)
Developers Summit
夏サミ2013【A1】基礎からわかるDevOps
夏サミ2013【A1】基礎からわかるDevOps
Developers Summit
Sqlアンチパターン読書会 インプリシットカラム
Sqlアンチパターン読書会 インプリシットカラム
Hiroyuki Ohnaka
実践!データベースリファクタリングツール
実践!データベースリファクタリングツール
Tatsunori Matoba
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
kwatch
Tapl 5
Tapl 5
rf0444
システムテスト自動化標準ガイド第7章
システムテスト自動化標準ガイド第7章
nihon buson
20120830 DBリファクタリング読書会第三回
20120830 DBリファクタリング読書会第三回
都元ダイスケ Miyamoto
第4章 自動比較
第4章 自動比較
toku toku
WooCommerce & Apple TV
WooCommerce & Apple TV
Marko Heijnen
アジャイルリーダーシップと組織改革 ~楽天のアジャイル開発というリアル~ エピローグ
アジャイルリーダーシップと組織改革 ~楽天のアジャイル開発というリアル~ エピローグ
Dai FUJIHARA
テスト自動化読書会 第3章 20150523
テスト自動化読書会 第3章 20150523
dnoguchi
すごいHaskell楽しく学ぼう 第6章
すごいHaskell楽しく学ぼう 第6章
aomori ringo
システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料
Masatoshi Itoh
文芸的プログラミング
文芸的プログラミング
Shoko Sasaki
[デブサミ2015] スクラムならうまくいく?〜グリーのネイティブゲーム作りの歴史をひもとく、そして未来へ〜
[デブサミ2015] スクラムならうまくいく?〜グリーのネイティブゲーム作りの歴史をひもとく、そして未来へ〜
gree_tech
20150418 システムテスト自動化 第二章
20150418 システムテスト自動化 第二章
atsushi ishiji
LeanCustomerDevelopment
LeanCustomerDevelopment
Kouki Kawagoi
TAPL勉強会 第1章 (2012-07-17)
TAPL勉強会 第1章 (2012-07-17)
none_toka
More Related Content
Viewers also liked
SQLアンチパターン読書会 「スパゲッティクエリ」
SQLアンチパターン読書会 「スパゲッティクエリ」
makopi 23
夏サミ2013 基調講演 「DevOpsは開発現場とビジネスの間に何を生むか?」(新野淳一氏)
夏サミ2013 基調講演 「DevOpsは開発現場とビジネスの間に何を生むか?」(新野淳一氏)
Developers Summit
夏サミ2013【A1】基礎からわかるDevOps
夏サミ2013【A1】基礎からわかるDevOps
Developers Summit
Sqlアンチパターン読書会 インプリシットカラム
Sqlアンチパターン読書会 インプリシットカラム
Hiroyuki Ohnaka
実践!データベースリファクタリングツール
実践!データベースリファクタリングツール
Tatsunori Matoba
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
kwatch
Tapl 5
Tapl 5
rf0444
システムテスト自動化標準ガイド第7章
システムテスト自動化標準ガイド第7章
nihon buson
20120830 DBリファクタリング読書会第三回
20120830 DBリファクタリング読書会第三回
都元ダイスケ Miyamoto
第4章 自動比較
第4章 自動比較
toku toku
WooCommerce & Apple TV
WooCommerce & Apple TV
Marko Heijnen
アジャイルリーダーシップと組織改革 ~楽天のアジャイル開発というリアル~ エピローグ
アジャイルリーダーシップと組織改革 ~楽天のアジャイル開発というリアル~ エピローグ
Dai FUJIHARA
テスト自動化読書会 第3章 20150523
テスト自動化読書会 第3章 20150523
dnoguchi
すごいHaskell楽しく学ぼう 第6章
すごいHaskell楽しく学ぼう 第6章
aomori ringo
システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料
Masatoshi Itoh
文芸的プログラミング
文芸的プログラミング
Shoko Sasaki
[デブサミ2015] スクラムならうまくいく?〜グリーのネイティブゲーム作りの歴史をひもとく、そして未来へ〜
[デブサミ2015] スクラムならうまくいく?〜グリーのネイティブゲーム作りの歴史をひもとく、そして未来へ〜
gree_tech
20150418 システムテスト自動化 第二章
20150418 システムテスト自動化 第二章
atsushi ishiji
LeanCustomerDevelopment
LeanCustomerDevelopment
Kouki Kawagoi
TAPL勉強会 第1章 (2012-07-17)
TAPL勉強会 第1章 (2012-07-17)
none_toka
Viewers also liked
(20)
SQLアンチパターン読書会 「スパゲッティクエリ」
SQLアンチパターン読書会 「スパゲッティクエリ」
夏サミ2013 基調講演 「DevOpsは開発現場とビジネスの間に何を生むか?」(新野淳一氏)
夏サミ2013 基調講演 「DevOpsは開発現場とビジネスの間に何を生むか?」(新野淳一氏)
夏サミ2013【A1】基礎からわかるDevOps
夏サミ2013【A1】基礎からわかるDevOps
Sqlアンチパターン読書会 インプリシットカラム
Sqlアンチパターン読書会 インプリシットカラム
実践!データベースリファクタリングツール
実践!データベースリファクタリングツール
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
Tapl 5
Tapl 5
システムテスト自動化標準ガイド第7章
システムテスト自動化標準ガイド第7章
20120830 DBリファクタリング読書会第三回
20120830 DBリファクタリング読書会第三回
第4章 自動比較
第4章 自動比較
WooCommerce & Apple TV
WooCommerce & Apple TV
アジャイルリーダーシップと組織改革 ~楽天のアジャイル開発というリアル~ エピローグ
アジャイルリーダーシップと組織改革 ~楽天のアジャイル開発というリアル~ エピローグ
テスト自動化読書会 第3章 20150523
テスト自動化読書会 第3章 20150523
すごいHaskell楽しく学ぼう 第6章
すごいHaskell楽しく学ぼう 第6章
システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料
文芸的プログラミング
文芸的プログラミング
[デブサミ2015] スクラムならうまくいく?〜グリーのネイティブゲーム作りの歴史をひもとく、そして未来へ〜
[デブサミ2015] スクラムならうまくいく?〜グリーのネイティブゲーム作りの歴史をひもとく、そして未来へ〜
20150418 システムテスト自動化 第二章
20150418 システムテスト自動化 第二章
LeanCustomerDevelopment
LeanCustomerDevelopment
TAPL勉強会 第1章 (2012-07-17)
TAPL勉強会 第1章 (2012-07-17)
Sqlアンチパターン読書会 #7スライド資料
1.
SQLアンチパターン 読書会 2013/08/08 第7章 マルチカラムアトリビュート
2.
アジェンダ 1. 目的:複数の値を持つ属性を格納する 2. アンチパターン:複数の値を定義する 3.
アンチパターンの見つけ方 4. アンチパターンを用いてもよい場合 5. 解決策:従属テーブルを作成する
3.
目的:複数の値を持つ属性を格納する 1つのテーブルに属するべきと思える属性に複数の 値がある場合にそれをどうやって格納するか。 あれ? 第1章「ジェイウォーク(信号無視)」と同じこと なの? 例) アンチパターンの一例として、あるカラムに複数の値を格 納するためにカンマ区切りの値を格納してた。
4.
今回の場合は、複数のカラムを用意して それぞれに値を格納するパターン。 例) アンチパターン:複数の列を定義する
5.
アンチパターンとなる所以 【検索が大変】 複数のカラムに検索対象となる値を比較しに行く のでSQLが複雑かつ見難くなる。 多少見やすくもなるけど.... SELECT * FROM
Bugs WHERE (tag1 = ‘crash’ OR tag2 = ‘crash’ OR tag3 = ‘crash’) AND (tag1 = ‘hdd’ OR tag2 = ‘hdd’ OR tag3 = ‘hdd’) SELECT * FROM Bugs WHERE ‘crash’ IN (tag1, tag2, tag3) AND ‘hdd’ IN (tag1, tag2, tag3)
6.
アンチパターンとなる所以2 【値の追加と削除が大変】 例)タグ”Soon”を追加したい。
7.
アンチパターンとなる所以 ■対処法 ※値のない空いているカラムは、目視やアプリケーション内で確 認する必要がある。 また、外の処理からの横槍(上書きとか)の考慮も必要。 1. 空のカラムを探して 2. UPDATE文実行
8.
アンチパターンとなる所以2 なら ・NULLIFを使って同時更新! ・WHEN〜THEN句を使って更新! UPDATE Bugs SET tag1
= NULLIF(tag1, ‘performance’), tag2= NULLIF(tag2, ‘performance’), tag3= NULLIF(tag3, ‘performance’); UPDATE Bugs SET tag1 = CASE WHEN ‘performance’ IN (tag2, tag3) THEN tag1 ELSE COALESCE (tag1, ‘persormance’) END
9.
アンチパターンとなる所以3 【一意性の保証が持てない】 制約を入れられる手段がないから、用意したカラム (tag1,tag2,tag3....)に同じ値を入れることも可能。 INSERT INTO Bugs
(description, tag1, tag2, tag3) VALUES (‘印刷が遅い’, ‘printing’,’performance’,’performance’)
10.
アンチパターンとなる所以4 【え?もっと入れるんですか?】 カラム(列数)が固定となるため、状況によっては用 意したカラムの数では足りなくなることもある。 ならカラム増やせばいいじゃん (ALTER TABLE 〜
ADD COLUMN文の発行) えっ!?(´・ω`・)エッ?
11.
アンチパターンとなる所以4 えっ!?(´・ω`・)エッ? テーブルの構造を変えると、外部からのアクセスを一時的に遮 断する必要がある。 カラムを追加した新テーブルを用意して、旧テーブルから内容 をコピーする方法もある。 が、場合によってはデータ転送に時間がかかる。 カラムを追加したテーブルを参照するすべてのSQL(クライア ント)に対して、追加したカラムも扱うように知り必要もある。 (バグの匂いがプンプンするぜ)
12.
アンチパターンの見つけ方 ユーザインタフェースやプロジェクトの ドキュメント(仕様書)に、複数の値を割り当てるもの の、上限が決められているような記述・説明があっ た場合。 例) タグ :「タグは最大5つまで記述が可能」 電話番号:自宅、携帯、FAX、日中の連絡先・・・ 対話の中で「サポートすべきxxxxの数っていくつまで?」 「SQLで複数の列を同時に検索する方法って知ってる」 が出てきた時。
13.
アンチパターンを用いてもいい場合 【列の順番が意味を成すとき】 例)各列にはユーザ名が入るが、それぞれに 「発見者」「修正者」「承認者」と意味を持つ場合。 (カラム名そのものを関連する意味を持つようにさせるとベター)
14.
アンチパターンを用いてもいい場合 【従属テーブルを作成するとき】 例)BugsテーブルからAccountテーブルへ複数の関連を持つ従 属テーブルを作成するとき。 (ただしEAVパターンでの””問題が発生することもあるので注意)
15.
解決策:従属テーブルを作成する 属性を格納する列を1つ持つ従属テーブルを作成 し、属性を格納する。 例) 更新や削除対象が従属テーブル側になるので楽チン。 PRIMARYキーの制約もつければ、重複も防げる。
16.
解決策:従属テーブルを作成する ちなみに、第1章「ジェイウォーク」での解決方法は 交差テーブルを作る。 でした。
17.
まとめ おなじ意味を持つ値は、 1つの列に格納するようにしましょう そして私見 今回のタグ名の用意、1〜∞のような事例が想定されるなら従属 テーブルを用意して対応。 電話番号程度の3つくらいまでなら設計・運用でカバーすれば いいんじゃない?
18.
以上。 ご清聴、ありがとうございました。 [@naopi]
Download now