1

私はデータベースの正規化についてある程度の考えを持っていますが、場合によっては、ONE DATA OBJECT = ONE TABLE パターンよりも洗練された解決策があると思うことがあります (私は信じています)。

例: 記事および静的ページの保管。データは非常に似ており、単純な識別子列を使用してそれらを 1 つのテーブルに配置できます。実際に保存しているデータの違いにより、すべてのデータ型に空白の未使用の列がいくつかあります。

id | title(both) | author(article only) | content(both) | datetime(article only) | type(identificator - article/page)

このアプローチはまだ正しいですか、それとも類似性に関係なく各データのテーブルが必要ですか?

4

1 に答える 1

1

あなたはSingle Table Inheritanceについて説明しています。これは正当なパターンです。http://martinfowler.com/eaaCatalog/singleTableInheritance.htmlを参照してください。

利点は次のとおりです。

  • 1 つのテーブルにすべてのサブタイプが含まれます。

欠点は次のとおりです。

  • NOT NULLサブタイプ固有の列は null 許容でなければならないため、制約を定義することはできません。
  • UNIQUEまたはFOREIGN KEY、サブタイプ固有の列に対する制約がサポートされていない場合があります (RDBMS の実装によって異なります)。
  • 多くのサブタイプがある場合、テーブルには多くの列があり、そのほとんどが NULL になります。一部のデータベースでは、特定のテーブルの列数に制限があります。ただし、MySQL の場合、テーブルあたりの最大列数は 4096 です。InnoDB は NULL を格納しないため、これは問題になりません。
  • 新しいサブタイプを頻繁に追加する場合は、サブタイプ固有の列を追加するたびにテーブルを ALTER する必要があります。

Class Table Inheritance ( http://martinfowler.com/eaaCatalog/classTableInheritance.html )などの代替手段について読みたいと思うかもしれません。

于 2013-07-01T20:32:21.437 に答える