私は、それぞれの仕様が異なるさまざまなタイプの製品を掲載しているサイトを持っています。
一連の列を持つ 1 つの製品テーブルのみを使用できるようにしたいのですが、タイプによって列が異なるため、タイプごとにケータリングする複数の製品テーブルを作成する必要があります。これは時間がかかり、継続的なソリューションとして管理するにはあまり効果的ではないと思います。
この種のシナリオをデータベースで管理する良い方法はありますか?
フレームワークとしてCakephpを使用しています。
データ構造を正規化します。たとえば、列を含み、各製品に関する追加情報を表すテーブル(テーブルにFKを含む)を用意しますproduct_info
。products
key
value
Martin Fowler は、3 つの一般的なアプローチを挙げています。
正当な理由がない限り、単一のテーブルが最も単純です。すべての可能なフィールドをそこに配置し、各クラスで必要なものだけを使用します。NOT NULL を強制できないという欠点があります。これが問題になる場合は、オブジェクトのタイプに応じてカスタム コンストレイントを作成するか、オプション 2 または 3 を使用します。
少し前に 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 の実装について、多くの興味深い視点を得ることができます。あなたがそれを好きかどうかは別の話です:)