2011-01-12 215 views
0

編輯: 將它全部放在1個大表中,並且有一個標誌區分不同形式是否是一個好主意?數據庫規範化

我必須建立一個5種形式的網站,也許更多。到目前爲止的形式領域如下:

http://i56.tinypic.com/25it7c7.jpg http://i56.tinypic.com/25it7c7.jpg

什麼是規範化這種設計的最佳方法?

我在想分裂「個人資料」分爲3個不同的表: http://i53.tinypic.com/auts2h.jpg http://i53.tinypic.com/auts2h.jpg

,然後用一個ID從他人引用它們...

會認爲有意義嗎?它看起來像我會結束很多關係...

+0

這是一個功課題嗎?如果是的話不是問題,但你應該在你的問題中提及它(而不是標籤)。回到你的問題:你說你正在考慮將「個人詳細信息」分成3個表格,但是你不會在你的表格圖中顯示這個名稱的表格。你的表格圖也不顯示完整的列名,所以很難看到它們是否可以正常化。最後,你是否真的遵守了規範化的規則並陷入困境,還是你只是要求別人去做所有的工作?我認爲你需要在你的問題上更具體。 – Tony 2011-01-12 12:18:30

+0

對不起,我現在意識到你提到的「個人詳細信息」是刺激通過提取個人詳細信息來規範設計的這一部分。 – Tony 2011-01-12 13:20:45

回答

2

規範化的數據本質上意味着相同的數據不是多次存儲在多個地方。例如,客戶ID不是通過訂單存儲客戶聯繫信息,而是與訂單一起存儲,客戶的聯繫信息與訂單「相關」。當客戶的電話號碼更新時,電話號碼只需要更新一個地方(客戶表),所有訂單都將具有正確的信息而不會被更新。每一塊數據都存在於一個地方,而且只有一個地方。這是標準化的數據。

因此,要回答你的問題:不,你不會像你所描述的那樣通過分解一個大表來使你的數據庫結構更規範化。

將單個表分成多個表的原因通常是創建一對多關係。例如,一個人可能有多個電子郵件地址。或者多個物理地址。分解表的另一個常見原因是使系統變成模塊化的,這樣就可以創建表連接到現有表而不修改現有表的表。

將一張大表分成多個小表,它們之間存在一對一的關係,但不會使數據更加規範化,這隻會讓您的查詢更加難以編寫。*而且您不除非有充分的理由,否則希望圍繞接口(表單)構建數據庫設計。通常沒有。

*儘管有時很好的理由來分解大表並創建一對一的關係,但規範化並不是其中之一。