これを試してみてください: 本、CD-S、DVD-S、そしてテーブル製品に行くものは何でも (私はあなたのすべての製品が持っているフィールドを追加しました)
+--------------+
| Products |
+--------------+
|id |
|name |
|price |
|bar_code |
+--------------+
次に、テーブルカテゴリがあります
+--------------+
| Categories |
+--------------+
|id |
|name |
+--------------+
次に、2つのテーブルを接続します(1つの製品がより多くのカテゴリに分類される場合に備えて、多対多を作成しました)
+--------------------+
| Product2Categories |
+--------------------+
|id |
|product_id |
|category_id |
+--------------------+
最後は、言語、年齢制限、食材などの特別な属性の表です。
+--------------+
| Attributes |
+--------------+
|id |
|name |
+--------------+
次に、製品を特別な属性に接続し、正しい値を割り当てる必要があります。
+---------------------+
| Attributes2Products |
+---------------------+
|id |
|product_id |
|attribute_id |
|value |// varchar(255)
+---------------------+
これで問題ありませんが、異なる属性には異なるタイプの値があるため、理想的ではありません。たとえば、本のプログラミングの言語はvarcharであり、スピリチュアリティの年齢制限はintegerです。上記の例では、すべての特別な属性値が varchar です。上記のデータベースを最適化したい場合は、属性テーブルを編集する必要があります。
+--------------+
| Attributes |
+--------------+
|id |
|name |
|type | //type of data it recives
+--------------+
次に、属性が整数型の場合のように、使用する予定のデータ型と同じ数の Attributes2Products テーブルを作成します。テーブルに特別な属性値を保存します。
+---------------------+
| IntegerAtt2Products |
+---------------------+
|id |
|product_id |
|attribute_id |
|value |// int(11)
+---------------------+
または属性が文字列型の場合
+---------------------+
| VarcharAtt2Products |
+---------------------+
|id |
|product_id |
|attribute_id |
|value |// varchar(255)
+---------------------+
等々。
お役に立てれば。