もっとオブジェクト指向の何かを試すことができます。
1.製品のベーステーブルを定義します
Products(ProductID, CategoryID, <any other common properties>)
2.テーブルカテゴリを定義します
Categories(CategoryID, Name, Description, ..)
ここから多くのオプションがあり、それらのほとんどすべてがデータベースの正規化を破ります。
解決策A。
新製品を追加する必要がある場合は、メンテナンスの悪夢になります
A1。カテゴリごとに個別のテーブルを定義します
Cars(CarID, ProductID, ..)
Pets(PetID, ProductID, ..)
A2。データを使用するために、関係に基づいてテーブルを結合します
SELECT <fields> FROM Cars INNER JOIN Products ON Cars.ProductID = Products.ProductID
解決策B。
さまざまなタイプのプロパティ(int、varcharなど)のメンテナンスの悪夢
B1。プロパティのテーブルを定義する
CategoryProperty (CPID, Name, Type)
B2。カテゴリとプロパティ間の関連付けを保持するテーブルを定義します
PropertyAssociation (CPID, PropertyID)
B12。プロパティを保持するテーブルを定義します(B1およびB2の代替)
Properties(CategoryID, PropertyID, Name, Type)
B3。プロパティのタイプ(int、double、varcharなど)ごとに、値テーブルを追加します
PropertyValueInt(ProductID, CPID, PropertyID, Value)
-int
PropertyValueString(ProductID, CPID, PropertyID, Value)
の場合-文字列
PropertyValueMoney(ProductID, CPID, PropertyID, Value)
の場合-お金の場合
B4。すべてのテーブルを結合して、目的のプロパティを取得します。
このアプローチを使用することにより、すべてのプロパティを個別のテーブルで管理する必要はありませんが、それらの値タイプを管理する必要があります。基本的に、関連するすべてのテーブルはルックアップテーブルになります。欠点は、各値を取得するために、すべての値タイプに対して「ケース」を指定する必要があることです。
これらのアプローチのいずれかを選択するときは、これらの記事(こことここ)を覚えておいてください。このフォーラムの投稿も興味深いものであり、ローカリゼーションに関するものですが、何らかの形で主題に関連しています。
Tomalakの答えを使用して、必要に応じて強い型付けを追加することもできます。