2012-04-22 87 views
0

我有超過一個尺寸的產品。下一個設計好嗎?有很多關係設計

  • 產品(#product_id,PRODUCT_NAME)

  • 尺寸(#size_id,#product_id,大小)

通過 '#' 我指的關鍵,無論是國外還是小學。

回答

1

你沒有清楚地指定哪個列組合是主鍵,哪些是外鍵約束,哪些是在Size表中唯一約束的。

  • Product_id顯然是一個引用Product的外鍵。它沒有問題。

  • Size_id可能是一個自動遞增標識符,並且意味着它是'Size'的'主鍵'。這對我來說似乎過火了,但實際上並沒有錯。

  • PRODUCT_ID和尺寸的無證組合需要在它的唯一約束,以確保您不會有兩排像這樣結束:

    Size_ID Product_ID Size 
    1234  23456  12 
    1235  23456  12 
    

,說同樣的事情兩次—的ID爲23456的產品尺寸爲12,並且說兩次相同的事情是重複的,並且容易導致錯誤的答案(產品23456進來的尺寸有多大—如果您必須寫COUNT(DISTINCT尺寸),則答案更難計算)而不僅僅是COUNT(*),而不是因爲輸入,而是因爲DBMS必須做更多的工作,並且因爲有人會忘記某個時間併產生錯誤的查詢,並且直到對事情發生嚴重錯誤的原因進行驗屍檢查之後纔會發現問題。

如果沒有Size_ID,您可以很好地使用Product_ID和Size的組合作爲主鍵。否則,您需要對Product_ID和Size有唯一的約束。

+0

我是否需要三張表ProductHasSize將product_id和size_id作爲PK進行生產,ProductHasSize和Size? – 2012-04-22 23:13:40

+0

這取決於您是否需要將ProductHasSize表中的「大小」值約束爲一組有效大小之一。如果你這樣做,那麼三表方法是合理的。大小表格將有列Size_ID和Description(或大約); ProductHasSize表將只有兩列:Size_ID,一個外鍵引用表Size和Product_ID,這是一個引用Product的外鍵。 ProductHasSize表上的主鍵將是Size_ID和Product_ID的組合(或者,也許相反)。 – 2012-04-22 23:37:03