LoginSignup
0
0

More than 5 years have passed since last update.

SQLアンチパターン:マルチカラムアトリビュート

Last updated at Posted at 2016-12-19

SQLアンチパターンを読み始めたので、1つ1つ書いてのメモです

目的

  • 目的:複数の値を持つ属性を格納する
  • ジェイウォーク(信号無視)と同じ。ジェイウォークでは、カンマ区切りで1つのカラムにデータを入れていた

アンチパターン

複数の列を定義する

  • tag1、tag2とか、image1、image2とか
    • やったことある

課題

  • 値の検索が複雑になる
    • tag1、tag2 を検索しなくてはいけない
  • 値の追加と削除が複雑になる
    • null のカラムを探してから update をすることになる
  • 一意性の保証ができない
    • tag1、tag2 に同じ値を入れちゃう
  • 増加する値に対応が大変
    • tag3 を増やすときには大きなテーブルになってて、ロックが必要になったり、取得用のSQLを書き換えたりする必要がある

用いてもいいパターン

  • 属性の選択肢を限定できる場合
    • tag1 には、報告者、tag2には、担当者、tag3 には、品質管理者
    • 論理的に異なる場合

解決策

  • 属性を格納する列を 1 つ持つ従属 テーブルを作成
  • ジェイウォークのときと発想は同じ

まとめ

同じ意味を持つ値は、1 つの列に格納するようにしましょう。

感想

  • やってた!
  • きちんとテーブルを分けます。

0
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
0
0