0

書籍、CD、DVD を扱うストアの DB を作成する必要があります。書籍には、プログラミング、料理、スピリチュアリティなどの 3 つのカテゴリがあります。すべての商品には、名前、価格、バーコードがあります。書籍には、書籍のカテゴリごとに特化したページとパラメーターがあります。プログラミング書籍の言語、料理本の主な構成要素、スピリチュアリティの年齢制限などです。CD と DVD は、misic、video、software に分かれています。したがって、DB を設計するとき、テーブルの接続に問題があります。1 つのフィールドに対して 3 つの異なるテーブルからデータを取得する必要があります。

+-----------+
| Tables    |
+-----------+
|Categories |
|Languages  |
|Main_Ingred|
|Age_Limits |
|Books      |
+-----------+

+--------------+
| Books        | 
+--------------+
|id            | 
|category_id   |
|price         | 
|bar_code      |
|pages         |
|special_param.| // Here I have to use data from 3 different tables
+--------------+

正しい判断ではないと思います。私たちを手伝ってくれますか?

また、商品の共通テーブルの設計についても同じ問題が発生します。

4

1 に答える 1

1

これを試してみてください: 本、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)
+---------------------+

等々。

お役に立てれば。

于 2013-10-23T13:37:25.637 に答える