2013-10-23 85 views
0

我需要創建具有書籍,CD和DVD的商店的數據庫。有三類書籍:編程,烹飪和例如靈性。所有商品都有名稱,價格,條形碼。書籍有專門針對各類書籍的頁面和參數,包括編程書籍的語言,烹飪書籍的主要成分以及靈性的年齡限制。 CD和DVD分爲misic,video和Software。所以,當我設計數據庫時,我在連接表中遇到問題:我必須從一個字段的三個不同表中獲取數據。簡單商店DB的設計

+-----------+ 
| 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 
+--------------+ 

我認爲這是不正確的決定。你可以幫幫我嗎?

而且我也會遇到同樣的商品普通表設計問題。

+2

爲什麼不把它們放在一張桌子(書籍/ dvd/cds);那麼你限制了這張表,這樣書本的內容只能屬於你提到的類別,而CD/DVD則屬於其他內容;列'頁面'可以保留並且可以爲空,因此它不用於dvds/cds或者將其命名爲'length'並且根據類型將其解釋爲代碼(書的長度意味着頁面,音樂/視頻的長度意味着秒,軟件的長度意味着兆字節);我建議重新考慮'special_param',因爲它讀起來像某種標記系統,這應該進入由外鍵引用的單獨的表中。 – DrCopyPaste

+0

你**有**保持某種「規範化形式」嗎?如果沒有,簡化你的設計。 –

回答

1

試試這個: 書籍,CD-S,DVD-S和任何去表產品(我添加的字段所有的產品都)

+--------------+ 
| Products  | 
+--------------+ 
|id   | 
|name   | 
|price   | 
|bar_code  | 
+--------------+ 

然後有一個表類

+--------------+ 
| Categories | 
+--------------+ 
|id   | 
|name   | 
+--------------+ 

然後連接兩個表(我已經做了很多很多,以防萬一一個產品進入多個類別)

+--------------------+ 
| Product2Categories | 
+--------------------+ 
|id     | 
|product_id   | 
|category_id   | 
+--------------------+ 

最後是像語言,年齡的限制,配料等這些特殊屬性表

+--------------+ 
| Attributes | 
+--------------+ 
|id   | 
|name   | 
+--------------+ 

,那麼你需要的產品與特殊屬性連接並分配正確的值:

+---------------------+ 
| Attributes2Products | 
+---------------------+ 
|id     | 
|product_id   | 
|attribute_id   | 
|value    |// varchar(255) 
+---------------------+ 

現在這沒關係,但它並不理想,因爲不同的屬性具有不同類型的值,例如用於編程書籍的語言是varchar,或者靈性的年齡限制是整數,在上面的示例中特殊屬性值是varchars。 如果ü要優化數據庫上面,你會需要編輯屬性表:

+--------------+ 
| Attributes | 
+--------------+ 
|id   | 
|name   | 
|type   | //type of data it recives 
+--------------+ 

,然後創建許多Attributes2Products表的,因爲有你打算使用像數據類型,如果屬性爲整數,U型保存在表中的特殊屬性值:

+---------------------+ 
| IntegerAtt2Products | 
+---------------------+ 
|id     | 
|product_id   | 
|attribute_id   | 
|value    |// int(11) 
+---------------------+ 

,或者如果屬性是字符串類型

+---------------------+ 
| VarcharAtt2Products | 
+---------------------+ 
|id     | 
|product_id   | 
|attribute_id   | 
|value    |// varchar(255) 
+---------------------+ 

等。

希望這會有所幫助。