1

私は、それぞれの仕様が異なるさまざまなタイプの製品を掲載しているサイトを持っています。

一連の列を持つ 1 つの製品テーブルのみを使用できるようにしたいのですが、タイプによって列が異なるため、タイプごとにケータリングする複数の製品テーブルを作成する必要があります。これは時間がかかり、継続的なソリューションとして管理するにはあまり効果的ではないと思います。

この種のシナリオをデータベースで管理する良い方法はありますか?

フレームワークとしてCakephpを使用しています。

4

3 に答える 3

1

データ構造を正規化します。たとえば、列を含み、各製品に関する追加情報を表すテーブル(テーブルにFKを含む)を用意しますproduct_infoproductskeyvalue

于 2012-10-14T13:55:33.133 に答える
0

Martin Fowler は、3 つの一般的なアプローチを挙げています。

  • 単一のテーブル- すべての列を 1 つのテーブルに配置し、必要なものだけを使用します (これは、あなたが持っているものに最も近いように聞こえます)
  • クラス テーブル- すべてのクラスには、そのクラスに固有のデータを格納する独自のテーブルがあります (関連するすべてのテーブルに同じ主キーがあります)。
  • 具象テーブル- 上記と同じですが、具象クラスのみがテーブルを持ち、抽象クラスは持ちません。

正当な理由がない限り、単一のテーブルが最も単純です。すべての可能なフィールドをそこに配置し、各クラスで必要なものだけを使用します。NOT NULL を強制できないという欠点があります。これが問題になる場合は、オブジェクトのタイプに応じてカスタム コンストレイントを作成するか、オプション 2 または 3 を使用します。

于 2012-10-14T15:45:48.473 に答える
0

少し前に Cake で EAV モデルを使用することについて書きました。 http://nuts-and-bolts-of-cakephp.com/2010/07/27/keyvalue-tables-and-how-to-use-them-in-cakephp-1-3/

また、これはあなたの特定の質問に非常に役立つ可能性があります... Magento(非常に人気のあるPHPベースのeコマースフレームワーク)のいくつかの概念を見て勉強してください。EAVスキーマを多用し、データ。

EAV の実装について、多くの興味深い視点を得ることができます。あなたがそれを好きかどうかは別の話です:)

于 2012-10-14T15:46:05.040 に答える