兎小屋の手記

PerlやPHPの話題などをひっそりと書きます。

SQLアンチパターン読書記録2

通勤時間でまた読み進めたのでメモメモ。

6章:ポリモーフィック関連 Bugs、FeatureRequestsという2つのテーブルに対してそれぞれのコメントをCommentsに格納する場合、 Commentsの親テーブルが2つになってしまい、外部キー制約が定義できないパターン。

解決策は2つ 1.多:多を関連づける交差テーブルを作成して、Bugs-交差テーブル1-Comments-交差テーブル2-FeatureRequestsとする。 2.5章のEAVと同様に、共通のIssuesテーブルを作成して、Bugs、FeatureRequests、Commentsという3つの子テーブルをぶら下げる。

7章:マルチカラムアトリビュート(複数列属性) 1章のジェイウォークと同様に単に正規化できていないパターン 1章は1カラムにカンマ区切り、こちらはカラム1,カラム2・・・としてしまうパターン。 こちらの場合は特にカラム数以上にデータを格納する場合に破綻する。

8章:メタデータトリブル(メタデータ大増殖) スタートレックに出てくる小さいが、繁殖力のあるトリブルという動物が元ネタ。 検索してみたら原作のトリブルは、顔や手足がない毛玉のような動物でした。

増加し続けるデータを何らかのルールによって複数のテーブルに分割するパターン。 一意性が保証できなくなったり、テーブルを跨いだクエリ実行が困難になる。 水平パーティショニングやシャーディングという機能を使うことが解決策らしい。 使ったことがないのでピンとこないが、今度試してみよう。

ここまででデータベース論理設計のアンチパターンは終了。