[英]Database Design - Foreign Key and Primary Key relationships across 3 tables
作為我自己的個人項目,我正在嘗試將正在使用的現有Access數據庫工具之一重新設計到VB.net中。 這包括從頭開始重新設計數據庫,因為當前數據庫絕對是一團糟。
這是我目前在SQL Server中重新設計時的當前數據庫:
現在使關系清楚:
在“ Client
表上,“ Client_ID
是主鍵。 這與Contracts.Client_ID
作為其外鍵有關系。 這也與Sites.Client_ID
作為Sites.Client_ID
鍵有關系。
在“ Sites
表上, Site_ID
是主鍵。 這與Contracts.Site_ID
作為其外鍵有關系。
每個表中的每個主鍵在每次創建記錄時都會自動增加一個。
這里的想法是一個簡單的客戶/站點/合同結構。 例如,客戶:Microsoft,站點:Reading總公司,合同(可以適用於整個公司或單個站點的任何類型的合同)。
沒有客戶,您將無法擁有一個網站。 您應該能夠將合同鏈接到客戶或站點。 目前,我在合同中允許將Site_ID
和Client_ID
都設置為Null來簡化此操作,因為我找不到任何方法來確保至少填寫了一個。
這種設計看起來合理並遵循最佳實踐嗎? 我已嘗試按照網絡上發現的許多不同建議遵循最佳實踐,為不同類型的數據命名表。 任何輸入將不勝感激
我建議您簽出創建和更改CHECK約束 。 一個簡單的條件(“ Client_ID不為空或Site_ID不為空”)
附帶說明,該結構應適用於業務規則。 客戶可以在沒有網站的情況下簽訂合同嗎? 這有意義嗎? 如果是這樣,那么繼續使用您擁有的內容,如果沒有,我建議您要求合同的站點信息(您將發票發送到哪里?),因此您可以從合同中刪除client_id。
鑒於這里的情況如此簡單,我不會再考慮其他問題,例如是否應該將電話號碼附加到站點或聯系人上? 我想說,聯系是續簽人員的電話號碼,可能與簽有合同的號碼有很大不同。
我會做類似的事情
客戶端
ClientID PK,名稱
僅特定於客戶的屬性
Client_Contracts
ClientID FK [客戶(ClientID)],ContractID FK(Contrats [ContractID])
Contratcs
ContractID(PK),StartDate,EndDate,SiteID FK(站點[SiteID])
僅合同必須具有的屬性。
網站
SiteID PK,網站的所有列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.