有名な書籍「SQLアンチパターン」を購入したので学習。
パターン①:信号無視
・1カラムにコンマ区切りで値を入れ、複数の紐付きを表現しようとする
id name favorite
1 hoge1 php,ruby
2 hoge2 javascript,ruby
3 hoge3 Java,php
4 hoge4 python
5 hoge5 ruby,python,php
理由
検索しにくい(検索時にLIKE演算子が必要&検索漏れしやすい)
データの更新・削除がかなり面倒
文字数制限による、格納上限の発生
インデックス不可のため、パフォーマンス低下
集約クエリ関数(COUNT, SUM, AVGなど)が使えない
バリデーション不可(php,1,ruby,Java,98など)
区切り文字の識別ができない(1,3,1,000 ←1000?1と000?)
解決手段
中間テーブルを置く
名前
name_id name
1 hoge1
2 hoge2
3 hoge3
4 hoge4
5 hoge5
お気に入り言語
lang_id name
1 php
2 ruby
3 python
4 Java
5 javascript
名前_お気に入り言語
id name_id lang_id
1 1 2
2 1 3
3 2 2
4 2 3
5 3 4
... ... ...
まとめ
値は結合して格納せずひとつひとつ。列、行に格納した方が良い。
記事を読んでくださった方は、是非弊社開発課のXもフォローしてね
毎日エンジニアに向けた情報発信を行っています
https://twitter.com/tech_cin