2016-04-27 66 views
1

我想弄清楚設置實體圖表的最佳方法。我將根據下面的圖片來解釋。類似實體的最佳表格關係設計

tblParentCustomer:此表存儲的信息爲我們的主要客戶,它可以是一個企業或消費者(他們使用的查找表tblCustomerType標識。)

tblChildCustomer:該表存儲的客戶,是主下顧客。主要業務客戶可以擁有授權員工和授權銷售代表。主要客戶可以擁有授權用戶。 (它們使用查找表tblCustomerType進行標識。)

tblChildAccountNumber:此表存儲tblChildCustomer的AccountNumbers。這些帳號主要針對兒童商業客戶。我可能會爲兒童消費者客戶添加帳號,但我相信這種設計可以滿足這些需求。

回到tblParentCustomer:如果這個客戶是消費者,我需要爲他們添加帳號。我的問題是,我是否創建了tblParentCustomer和tblParentAccountNumber之間的一對多關係?這個選項會給我2個不同的帳號表。

或者創建與tblParentCustomer和tblChildCustomer相交的Junction Account Table是否有意義?

第一個選項對我來說沒有意義,因爲如果客戶只有一個帳號,但是多個子客戶會有什麼結果?

是否有意義擁有2個類似的帳戶表,用於不同的目的?

enter image description here

+0

是否一個客戶有一個賬戶號碼或者一個客戶有多個AccountNumbers?如果一個客戶只有一個AccountNumber,則AccountNumber應直接包含在Customer表中。如果AccountNumber永遠不會改變,則可以將AccountNumber用作主鍵。 –

+0

可以ChildAccountNumber與ParentAccountNumber具有相同的數字嗎?如果不是,爲什麼把它們放在兩個單獨的表格中?只需在兩者之間指定一個名爲Parent的字段,將其設置爲True或False。 –

回答

1

創建多到許多你希望它是這樣,你需要一個鏈接表,這將使整個事情,從1-去*然後* -1 該鏈接表會有兩個FK,一個鏈接到parentTable,另一個鏈接到childTable。這兩個FK的組合會給你一個複合PK(這對於避免重複是很重要的)。它將允許任何客戶成爲儘可能多的賬戶的一部分(這樣做會使父/子表成爲多對多的關係)。 對於CRM或任何包含人員的帳戶,此方法非常常見。進一步推進並在該表中,您可能需要在AccountMembers表中添加「是主要聯繫人」。刪除childAccountNumber表;你不需要它。 enter image description here

enter image description here

+0

此外,如果每個帳戶_can_只有一個父帳戶,請在該帳戶中填寫一個表示父帳戶ID的字段。如果多於一個,則創建另一個類似於accountMembers的關係表,其中兩個fk將組合的PK指向帳戶名稱,如ParentAccountID和ChildAccountID。這是要走的路。 – WickedFan