ジェイウォーク(信号無視)
- 多対多(Many-to-Many)の関係を正しく表現せず、データが格納されているべきテーブルの外部に、冗長な形で関連データ(特にIDのリスト)をカンマ区切りなどの文字列として格納してしまうアンチパターン
| 社員CD | 所属部署 |
|---|---|
| 10001 | 営業 |
| 10002 | 経理 |
| 10003 | 営業/経理 |
※ カンマや『/』などの区切り文字を利用 長くなる・毎回更新
⬇
| 社員CD | 所属部署 |
|---|---|
| 10001 | 営業 |
| 10002 | 経理 |
| 10003 | 営業 |
| 10003 | 経理 |
※ 行を分けて管理
ナイーブツリー
- SQLアンチパターンにおける「ナイーブツリー(Naïve Tree、単純なツリー)」とは、階層的なデータ構造(ツリー構造、例:組織図、カテゴリ、コメントのスレッドなど)をデータベースで表現する際に、最も単純で、しかし多くの問題を抱える方法を採用してしまうアンチパターン
| id | 組織名 | 上位組織 |
|---|---|---|
| 1 | 本社 | NULL |
| 2 | 営業部 | 本社 |
| 3 | 経理部 | 本社 |
| 4 | 営業1課 | 営業部 |
| 5 | 営業2課 | 営業部 |
※ 階層構造の参照が難しい
⬇
| id | 組織名 | 上位パス |
|---|---|---|
| 1 | 本社 | 本社/ |
| 2 | 営業部 | 本社/営業部/ |
| 3 | 経理部 | 本社/経理部/ |
| 4 | 営業1課 | 本社/営業部営業1課/ |
| 5 | 営業2課 | 本社/営業部/営業2課 |
※ 参照はしやすいが管理はしにくい ⇨ 分析用に構築
※ 再起クエリを利用する手もある
IDリクワイアド(とりあえずID)
- 主キーの役割を理解しないまま、すべてのテーブルに無条件で意味のない(業務的な意味を持たない)連番のサロゲートキー(代理キー)を主キーとして設定してしまうアンチパターン
| id | 受注ID | 品目ID |
|---|---|---|
| 1 | 9100001 | I001 |
| 2 | 9100001 | I002 |
| 3 | 9100002 | I003 |
| 4 | 9100002 | I004 |
| 5 | 9100003 | I005 |
| 6 | 9100003 | I006 |
※ 受注IDと品目CDでユニーク(一覧)なのにIDが存在する
⬇
| 受注ID | 品目ID |
|---|---|
| 9100001 | I001 |
| 9100001 | I002 |
| 9100002 | I003 |
| 9100002 | I004 |
| 9100003 | I005 |
| 9100003 | I006 |
※ 受注IDと品目CDで主キーを構築 整合性を保てる
キーレスエントリ(外部キー嫌い)
※ 論理的な関係性はあるが外部キーを設定するかどうか?
※ アプリケーション側でチェックしているなら不要
⇨ 二重チェック メンテナンスが難しくなる
⇨ データパッチで順番を意識する必要が出てくる
EAV(エンティティ・アトリビュート・バリュー)
| 品目CD | 属性名 | 属性値 |
|---|---|---|
| I001 | 品目名 | みかん |
| I001 | 単価 | 100 |
| I001 | カテゴリ | 柑橘類 |
| I001 | 旬 | 冬 |
| I002 | 品目名 | レモン |
| I002 | 単価 | 150 |
※ SQLデータ型が使えない 必須設定ができない 一方拡張性は高い
⬇
※ 属性は横に持たせる
| 品目CD | 品目名 | 単価 | カテゴリ | 旬 |
|---|---|---|---|---|
| I001 | みかん | 100 | 柑橘類 | 冬 |
| I002 | レモン | 150 | 柑橘類 | 冬 |
ポリモーフィック関連
※ 電話とメールの詳細情報を別管理 制約が使いにくい
⬇
※ それぞれ別テーブル もしくは区分追加
マルチカラムアトリビュート(複数列属性)
| 受注ID | 品目名1 | 品目名2 | 品目名3 |
|---|---|---|---|
| 9100001 | りんご | NULL | NULL |
| 9100002 | みかん | スイカ | NULL |
| 9100003 | いちご | モモ | メロン |
※ 正規化ができておらず、管理が難しい(一意性の確保・更新対象列の確認)
⬇
| 受注ID | 品目名 |
|---|---|
| 9100001 | りんご |
| 9100002 | みかん |
| 9100002 | スイカ |
| 9100003 | いちご |
| 9100003 | モモ |
| 9100003 | メロン |
※ 従属テーブルを作成(正規化)
メタデータトリブル(メタデータ大増殖)
※ ワークテーブルも削除するためのルール・仕組みを検討しておく
[受注テーブル]
[受注テーブル2010][受注テーブル2011][受注テーブル2012]
※ 同じ構造のテーブルが複数存在する(例えば年ごとに作成)
⬇
[受注テーブル]
[過去受注テーブル]
[受注テーブル退避(ファイル)]
※ パフォーマンスのために過去テーブルを1つ それより過去はファイルで退避