2013-02-09 75 views
0

有人可以確保我的數據庫是第三範式,如果不是,解釋爲什麼不呢? 我需要數據庫只有3個表。所以在這裏,它是:數據庫第三範式

Customer No. (PK)  Store No. (PK)  Sale No. (PK) 
Name     Location   Customer No. (FK) 
Telephone    Revenue   Store No. (FK) 
Address         Total 
Purchases($)        Paid 
Store No. 
+0

這不是 - 在「購買」將是一個持續的。如果我改成了總採購會的問題被解決了應該有自己的表(也許是鏈接到銷售表?) – 2013-02-09 09:06:29

+0

增量值的列表? – Steve2056726 2013-02-09 09:25:59

回答

0

這是你的三個表應該是什麼:表1:客戶

Customer No. (PK) 
Name 
Telephone 
Address 

然後表2:商店

Store no. (PK) 
Location 

則表3:銷售

Sale No. (PK) 
Customer No (FK) 
Store No (FK) 
Total 
Paid_yes_no 

如果您試圖通過Paid列追蹤部分付款等,那麼它將是一個單獨的表格(以及更復雜的數據庫)。但是,如果您的Paid欄只是表明賬單是否已經支付,上述應該可以工作。

也許你需要一個Date領域有作爲?

+0

好吧,我已經打算付費列是一個布爾數據類型。謝謝你的幫助! – Steve2056726 2013-02-09 09:52:18

+0

標記我的答案正確,然後! :) – 2013-02-09 09:53:31

0

有幾個問題,其中一些可能是因爲規範是家庭作業,而不是真實的世界。

  • 在客戶Store No.是一個重複的列這是合理的期望,與多個存儲業務有誰使用多個商店的客戶 - 除非你的規範說,否則在這種情況下,分類(命名)應該擴大,可以考慮第一家店鋪號碼家店鋪號碼改爲。如果它仍然存在,它應該被標記爲外鍵。
  • 在客戶表Purchases($)是這將改變其他數據依賴。由於它來源於其他信息,所以不應該存儲它。
  • Address不是一列 - 它有多個部分,如街道,城市,州,國家&郵政編碼可能需要額外的表格細節,以完全滿足第二範式。同樣Telephone不可能只是一個數字。

每次你需要知道應該出現一次且唯一的事情。如果你能從別的東西算出來,你應該這樣做,而不是存儲答案。在現實世界中,您有時可能會將某些信息緩存在表中或進行批處理以獲得性能,但這些信息稍後會應用並且僅在必要時應用。

數據庫規範化的簡要概述爲http://databases.about.com/od/specificproducts/a/normalization.htm,你或許應該通過再加工項目前。