我有一個現有的應用程序在數據庫Exclusice弧和多多對多的關係數據庫設計問題
- 客戶
- InvoiceGroup
- SalesGroup
一位顧客下列實體可以是多個組的一部分。目前這以如下方式映射:
Customer table
- cid (Pk)
- fname
- surname
----
---
- invgrpdid (Fk)
- salesid (Fk)
Invoicegroup table
- invgrpid (Pk)
- name
- type
---
----
Salesgroup table
- salesid (Pk)
- name
- desc
-----
-----
我現在有要求添加新的實體廣告系列。客戶可以成爲多個廣告系列的一部分。廣告活動的部署是由 創建的客戶羣 - 選擇個人客戶(自定義)或 - 選擇現有invoicegroup(發票)OR - 選擇現有salesgroup(銷售)
該活動的客戶名單應該是 - 可重複使用的,即可以用於多個廣告系列 - 動態的,即如果從發票/銷售團隊創建的,橫跨發票和銷售團隊 變化應該反映到廣告活動的客戶名單
我有困難的設計爲動態要求。我已經提出了以下設計,但它具有專用弧,這是一個指向多個外鍵的鍵,這不是推薦的方法。我曾想過超類型和子類型,但我在設計多對多關係時並不清楚。
campaign
- campaignid(Pk)
- name
- startdate
- status
------
campaignlist
- listid(Pk)
- listname
- listtype - Invoice, Sales, Custom
- typeid (Fk) - Refers to invoicegroupid or salesgroupid depending on listtype
-----
customercampaign
- listid (Fk)
- customerid (Fk)
- status
- dateupdated
-------------
什麼是更好的方法來設計這個考慮參照完整性和規範化。 每天多次運行最頻繁的查詢將檢索客戶的所有活動信息。所以需要注意多個表和連接。
當你說「我不清楚設計多對多關係」時,你說什麼多對多的關係? –
@Catcall - 我的意思是客戶和廣告系列表以及發票組和廣告系列以及銷售組和廣告系列的多對多關係。正如埃裏克史密斯所建議的,我曾想過爲他們每個人單獨加入表格,但是想知道是否還有其他方法。 – Angela