Normalization

實踐數據庫規範化

  • February 19, 2014

我是數據庫設計的新手,我對如何創建具有最小冗餘的數據庫有點困惑。假設我有一個abc包含重複數據的表,並且沒有兩行是相同的。現在減少重複?我遵循規範化規則並將表格分解為與 tableabc有關係的其他表格abc。現在在表中顯式添加一個主鍵來abc唯一標識每一行是公平的做法,還是我們可以忽略添加主鍵?

如果在表中添加主鍵abc並且表中abc包含一列authid (int)。然後它與其中的主鍵值發生衝突。

更新

要詳細說明一個平面數據庫,abc假設我有一個library table帶有列的

ISBN   Title   Auid   Auname   Auphone   Pubid  Pubname   pubphone   price
-----------------------------------------------------------------------------
11111  C++      4     Roman    2147483647  1   Big House    1234567890  20
9999   Emma     1     Austen   1111111111  1   Big House    1234567890  20
9133   Faeri    7     Spenser  2147483647  1   Big House    1234567890  15
9104   Hamlet   5  Shakespeare 2147483647  2   Alpha Press  2147483647  20
1034   Iliad    3    Homer     2147483647  1   Big House    1234567890  25
1234   Jane     1    Austen    1111111111  3   Small House  2147483647  49
9977   King     5  Shakespeare 2147483647  2   Alpha press  2147483647  49
5555   Macbeth  5  Shakespeare 2147483647  2   Alpha press  2147483647  12

在這裡,lib table我們可能有ISBN兩行相同,但任何兩行都是唯一的。數據的重複很明顯,如圖所示,為了減少這種情況,我們可以打破表格並遵循規範化

圖書

Title
ISBN
Price
ISBN primary key

作者

AuName
AuPhone
AuID
Auid primary key

出版商

PubName
PubPhone
PubID
Pubid primary 

和:

書籍/作者

ISBN
Auid

維護書籍/作者關係

那麼我可以在平面中明確添加主鍵library table還是如何實現規範化?我想我應該添加主鍵否則沒有關係。這是否足以實現規範化或任何其他概念或審查總是受歡迎的?

以下範例來自Steven Roman 的 Access Database Design & Programming, 3rd Edition

你對桌子的拆解在很大程度上是正確的。存在三個有形物體,一本書、作者和出版商。這些中的每一個都需要一個表,我們還需要一個表來儲存 Authors 和 Books 以及 Publishers 和 Books 之間的關係,因為這些關係是多對多的。

圖書

ISBN (primary key)
Title
Price 

作者

AuId (primary key)
AuName 
AuPhone 

出版商

PubId (primary key)
PubName
PubPhone

書籍作者

AuBId (primary key)
AuId (composite key)
ISBN (composite key)

圖書出版商

PubBId (primary key)
PubId (composite key)
ISBN (composite key)

您可以只使用複合鍵,而不是在定義多對多關係的最後兩個表上使用顯式主鍵。

編輯:

當我說複合鍵時,我的意思是如果主鍵存在,它是由多列組成的備用唯一鍵。如果沒有定義其他主鍵,則主鍵將被定義為兩列,即PubIdISBN。使用複合鍵作為主鍵有利有弊,人們對最佳選擇有不同的看法。

沒有理由用上面的表結構顯式儲存庫表,所有資訊都已儲存。如果絕對必要,我會認為 ISBN 是唯一的,如果不是,您可以如上所述添加一個主鍵列,如 serialno 以保持完整性。

引用自:https://dba.stackexchange.com/questions/59177