Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

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

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

Qiita Conference 2025 will be held!: 4/23(wed) - 4/25(Fri)

Qiita Conference is the largest tech conference in Qiita!

Keynote Speaker

ymrl、Masanobu Naruse, Takeshi Kano, Junichi Ito, uhyo, Hiroshi Tokumaru, MinoDriven, Minorun, Hiroyuki Sakuraba, tenntenn, drken, konifar

View event details
0
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?