2013-11-02 21 views
0

我正在設計一個數據庫,並且有一些名爲Staff,Member,Supporter等的表。在這些表中的每個列都是列:街道,城市,州,國家,郵政編碼。是否應該創建一個單獨的表來處理所有這些列,並從這些表中引用,因爲這些列經常出現?如果是這樣,我該怎麼做?爲每個地址創建一個ID,以便我可以在地址表中獲得正確的地址?SQL爲頻繁列創建一個新表

回答

0

就我而言,您需要爲Address Detail創建單獨的表格。地址詳細信息添加兩列供參考。

  1. 主ID - >您爲一個表定義一個唯一的ID。例如1001職員,1002職員......等。
  2. 交易ID - >如果任何記錄插入了該ID,則與此交易ID鏈接。
1

你試圖追求的基本原理叫做歸一化,通常是一件好事。你可以在這裏閱讀更多關於它的信息:http://en.wikipedia.org/wiki/Database_normalization

我是「正常化,直到它傷害,正常化,直到它工作」的粉絲。您是否需要執行諸如搜索所有地址及其關聯記錄之類的內容,而不考慮類型?無論他們是員工,會員還是支持者,都需要在同一地址找到每個人?這些類型的東西是令人信服的理由將地址規範化爲單個表格。

但是,您是否需要將地址作爲第一個訂單實體,郵局的方式?如果您需要將它們區分開來,您可能希望有多個實體指向相同的地址。但在這種情況下,你正在談論多對多的關係,這增加了複雜性,即使它是一個更準確的「現實世界」模型,也不一定令人滿意。如果你可以住在不同關係所指向的重複地址上,或者不要指望重複,你可以節省自己的複雜性。

您提出了一個很好的問題。這些都是情境性的,如果你要有一個龐大複雜的系統,你應該仔細考慮數據的用例,並且得到幫助,直到你有足夠的自信不要問這樣一個簡單的問題。

如果您只是練習或設計一個相對簡單的系統,那麼您應該按照描述的規範化數據。我只需要一個帶有每行ID的「地址」表。

0

您可以將它們分隔爲人物/角色。你將得到一個角色表(即員工,成員,支持者等)和一張人名錶(名稱,地址,街道,城市等)

這給你完全的人和角色的關係控制,包括一個人是什麼時候成爲支持者的歷史,成爲了一名成員,並且被僱用爲職員 - 各種各樣。

考慮這個小提琴:http://sqlfiddle.com/#!2/3826c/5/0

(。(原諒小提琴,這是我sqlfiddle的第一份額不知道你的數據庫,我選擇了MySQL的))

+0

我忘了提及有加盟表「PersonRoles」它將personid和roleid分配給PersonRoles的唯一索引。加上時間戳和中提琴! – JBC