2013-04-20 83 views
1

我有兩個關於項目的問題。如果我得到澄清,將不勝感激。數據庫設計問題

  1. 我已經打破到最小 單元分解地址轉換成單獨的實體。 Bur地址在幾張表中重複。 Like地址字段有 Client表以及Employee表。如果我們只是一個鏈接字段中的地址分離成單獨的表

    對於實例

  2. 具有以下屬性創建ADDRESS表:

    • ENTITY_ID(這可能是一個員工ID (家庭住址)或客戶端ID(辦公地址))
    • 單位
    • 大廈
    • 局部性
    • 國家
    • 國家
    • 郵編
  3. 取下Employee表和Client表中的所有地址字段

我們可以通過獲取employee ID並參照ADDRESS表獲得地址

哪種方法更好?在所有表中具有地址字段或分開,如上所示。任何關於哪個設計更好的想法?

+1

看看這個:http://stackoverflow.com/questions/6576442/should-user-and-address-be-in-separate-tables – passion 2013-04-20 08:18:23

回答

1

將地址分隔成單獨的表是一個更好的設計決策,因爲它意味着任何db端驗證邏輯等只需要在一個地方維護。

3

雅絕對分離地址更好因爲人們可以有多個地址,所以它會增加數據冗餘。

您可以根據我以兩種方式爲這個問題設計數據庫。

A.使用一個表

表名--- ADDRESS

列名稱

  1. 序列號(唯一ID或主鍵)
  2. 客戶端/員工ID
  3. 地址。

B.使用兩個表

表的名字--- CLIENT_ADDRESS

列名

  1. 序列號(唯一的ID或主鍵)
  2. 客戶端ID(外鍵的客戶表)
  3. 地址。

表名--- EMPLOYEE_ADDRESS

列名稱

  1. 序列號(唯一ID或主鍵)
  2. 客戶端ID(外鍵僱員表)
  3. 地址。

當然,你可以使用盡可能多的列數,而不是地址就像你所提到的單位,建築物,街道等

也有是從我的經驗,一個建議

請在您的每個表格中添加這五列。

  1. CREATED_BY(誰創造了此行意味着應用程序的用戶)
  2. CREATED_ON(在創建什麼時間和日期錶行)
  3. MODIFIED_ON(誰修改了該行指的一個用戶應用程序)
  4. MODIFIED_BY(在什麼時間和日期錶行修改)
  5. DELETE_FLAG(0 - 刪除,1 - 主動)

ŧ他從大多數開發人員的角度來看這個原因是,你的客戶可以隨時請求任何時間段的記錄。所以,如果你在現實中刪除,那麼對你來說這將是一個嚴重的情況。因此,每當應用程序用戶從gui刪除記錄時,您必須將該標誌設置爲0,而不是實際刪除它。默認值是1,這意味着該行仍處於活動狀態。這是從我的經驗建議:

在檢索的時候,你可以在那裏像這樣

select * from EMPOLOYEE_TABLE where DELETE_FLAG = 1; 

注意條件進行選擇。我根本沒有強制你採納這一點。所以請根據您的要求添加它。

另外,沒有任何重要目的的表不需要這個。