7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SQLアンチパターン:信号無視

Posted at

有名な書籍「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もフォローしてね:relaxed:
毎日エンジニアに向けた情報発信を行っています:raised_hands_tone2:
https://twitter.com/tech_cin

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?