際際滷

際際滷Share a Scribd company logo
SQLアンチパタ`ン
i氏
2013/08/08
及7嫗
マルチカラムアトリビュ`ト
アジェンダ
1. 朕議済}方の、魍屬鎚來を鯉{する
2. アンチパタ`ン済}方の、魘xする
3. アンチパタ`ンのつけ圭
4. アンチパタ`ンを喘いてもよい栽
5. 盾Q貨愱凜透`ブルを恬撹する
 
朕議済}方の、魍屬鎚來を鯉{する
1つのテ`ブルに奉するべきと房える奉來に}方の
、ある栽にそれをどうやって鯉{するか。
あれ 及1嫗仝ジェイウォ`ク(佚催o)々と揖じこと
なの
 箭) アンチパタ`ンの匯箭として、あるカラムに}方の、鮓
{するためにカンマ曝俳りの、鮓饉{してた。
書指の栽は、}方のカラムを喘吭して
それぞれに、鮓饉{するパタ`ン。
箭)
アンチパタ`ン済}方の双を協xする
アンチパタ`ンとなる侭參
‐碧が寄筺
 }方のカラムに碧鵑箸覆、魃否^しに佩く
のでSQLが}jかつyくなる。
謹富やすくもなるけど....
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)
アンチパタ`ンとなる侭參2
‐、臨啓咾範茅が寄筺
箭タグ ̄Soon ̄を弖紗したい。
アンチパタ`ンとなる侭參
*I隈
☆、里覆た佞い討い襯ラムは、朕やアプリケ`ション坪で_
Jする駅勣がある。
また、翌のI尖からの罪(貧きとかの深]も駅勣。
1. 腎のカラムを冥して
2. UPDATE猟g佩
アンチパタ`ンとなる侭參2
なら
 ?NULLIFを聞って揖r厚仟
?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
アンチパタ`ンとなる侭參3
‐匯吭來の隠^が隔てない/
崙sを秘れられる返粁がないから、喘吭したカラム
tag1,tag2,tag3....)に揖じ、鯣襪譴襪海箸眇苗棔
INSERT INTO Bugs (description, tag1, tag2, tag3)
VALUES (`咫泡がWい¨, `printing¨,¨performance¨,¨performance¨)
アンチパタ`ンとなる侭參4
‐え燭發辰犯襪譴襪鵑任垢拭
カラム双方が耕協となるため、彜rによっては喘
吭したカラムの方では怎りなくなることもある。
  ならカラムやせばいいじゃん
   ALTER TABLE ? ADD COLUMN猟のk佩
えっ。(??ω?)???
アンチパタ`ンとなる侭參4
えっ。(??ω?)???
 
 テ`ブルの夛を笋┐襪函⇒皺燭らのアクセスを匯r議に孳
僅する駅勣がある。
 カラムを弖紗した仟テ`ブルを喘吭して、症テ`ブルから坪否
をコピ`する圭隈もある。
が、栽によってはデ`タ僕にrgがかかる。
 カラムを弖紗したテ`ブルを歌孚するすべてのSQL┘ライア
ントにして、弖紗したカラムもQうように岑り駅勣もある。
┘丱阿いがプンプンするぜ
アンチパタ`ンのつけ圭
ユ`ザインタフェ`スやプロジェクトの
ドキュメント(碧)に、}方の、鮓遒蟲韻討襪發
の、貧泙Qめられているような峰?h苧があっ
た栽。
 
箭 タグ  此献織阿恷寄5つまで峰が辛嬬々
   桑催祭壞、亊。、FAX、晩嶄のBj枠???
の嶄で仝サポ`トすべきxxxxの方っていくつまで拭
仝SQLで}方の双を揖rに碧する圭隈って岑ってる々
が竃てきたr。
アンチパタ`ンを喘いてもいい栽
‐双の桑が吭龍を撹すとき/
箭光双にはユ`ザ兆が秘るが、それぞれに
仝k宀々仝俐屎宀々仝覚J宀々と吭龍を隔つ栽。
┘ラム兆そのものをvBする吭龍を隔つようにさせるとベタ`
アンチパタ`ンを喘いてもいい栽
‐愱凜透`ブルを恬撹するとき/
箭Bugsテ`ブルからAccountテ`ブルへ}方のvBを隔つ
奉テ`ブルを恬撹するとき。
┐燭世EAVパタ`ンでの ̄ ̄}がk伏することもあるので廣吭
盾Q貨愱凜透`ブルを恬撹する
奉來を鯉{する双を1つ隔つ愱凜透`ブルを恬撹
し、奉來を鯉{する。
箭
厚仟や茅鵑愱凜透`ブル箸砲覆襪里Sチン。
PRIMARYキ`の崙sもつければ、嶷}も契げる。
盾Q貨愱凜透`ブルを恬撹する
ちなみに、及1嫗仝ジェイウォ`ク々での盾Q圭隈は
住餓テ`ブルを恬る。 でした。
まとめ
おなじ吭龍を隔つ、蓮
1つの双に鯉{するようにしましょう
そして暴
書指のタグ兆の喘吭、1?±のような並箭が覿┐気譴襪覆愱
テ`ブルを喘吭して鬄
桑催殻業の3つくらいまでならO?\喘でカバ`すれば
いいんじゃない
參貧。
ご賠、ありがとうございました。
[@naopi]

More Related Content

Sqlアンチハ?タ`ンi氏 #7スライト?Y創