2014-01-29 47 views
0

我正在研究一個ASP.NET MVC 4應用程序,其中每個'級別'都有一個選項來添加費用。假設我有一個公司可以有許多活動(1對多),並且有許多產品(1對多)的活動。 [使用DB頭設計]具有相同模式的多個表或具有多個外鍵的1個表?

A公司,廣告活動和產品都可以有與之相關費「清單,併爲費數據是一樣的[名稱,價值,FK等]

我目前正在使用一個「CompanyFee」,「CampaignFee」和「ProductFee」表,它有一個與它關聯的表的外鍵。 [除FK關係以外的其他表格]

是否有意義的是隻有一個「費用」表具有可用於收費的每個表的外鍵列。所以「FeeTable」將會是[Name,Value,CompanyID(FK),CampaignID(FK),ProductID(FK)等]

這意味着如果ProductID是唯一的,它將被視爲「ProductFee」 FK帶有一個值,而其他的則爲空。

將這些表格分開是最佳實踐嗎?兩種結構的其他含義是什麼?

+0

歡迎來到*多態關聯*的世界。嘗試獲得Bill Karwin的書「SQL Antipatterns」並閱讀他的建議。或者:http://stackoverflow.com/a/2003042/861716。或者這個:http://stackoverflow.com/q/7000283/861716 –

回答

1

這個討論只涉及數據建模,而不是EF或ASP.NET MVC的考慮因素。我看到2個選項。兩者都是正確的。選項1要求費用PK是費用ID,並且該公司ID_FK不爲零,而另外兩個FK應該是可空的。

如果你想使你的模型靈活的,我建議你去選擇2

但是,如果你不打算擴展模型,或者如果你有這方面沒有進一步的要求,選擇1是一個有效的選擇,它使用較少數量的表並且將需要較少的代碼行。

與選項1的問題是,如果將來你創建與費用表的表,你會惹上例如奇情形:

答:如果您需要有一個「費的說明」桌子,你將不得不有1表3所有3費用。這是不好的,因爲一些描述可能不適用於所有費用類型。

B.如果您需要有一個「費用批准人」表格,您需要爲所有3種費用類型的批准人提供一張表格。

你不會選擇2.

與選項2的明顯的問題是表和額外的代碼行數多面臨的上述問題。

雖然您尚未提供尺寸信息,但根據域的性質,我沒有看到尺寸導致性能問題。

enter image description here

+0

我結束了與Option1一直工作相當不錯的感覺。感謝您的幫助(對於延遲的響應抱歉) – user3250366

相關問題