2012-02-14 64 views
1

我正在做一些使用Azure和Idea Blade DevForce的工作,我想知道從映射實體到數據庫表的最佳方法是什麼......實體應該映射到自己的數據庫表嗎?

實體是否應該在數據庫中擁有自己的表?這樣做是否有任何性能優勢/不利影響?假設我們有一個「訂單」實體,一個「產品」實體,一個「客戶」實體和一個「地址」實體;將這些混合在一張桌子中與把它們全部分離出來的利弊是什麼?很顯然,如果我們沒有分開,數據庫將不會處於第三範式,但是在使用MEF/DevForce時這很重要嗎?作爲第二個(設計不太好的)例子,如果我們有一個「賬戶」實體和一個「用戶」實體,那該怎麼辦?一個帳戶可以有很多用戶,但用戶只能屬於一個帳戶......這樣,將它們全部放在一張表中並不會重複任何用戶數據,但我(個人)仍然認爲這種方法顯然是錯誤的。是否有任何理由說明它會帶來好處?

+0

它只是您感興趣的性能或其他事物,如可維護性等。 – Fen 2012-02-14 09:18:08

+0

不,我對可維護性也非常感興趣!我們需要對模型進行更改,不會徹底打破存儲的現有項目! – Siyfion 2012-02-14 10:19:20

回答

2

取決於您喜歡複製數據的多少,以及是否希望任何人都認真對待您作爲開發人員。把所有東西都扔進堆裏,是我能想到的最糟糕的反模式。

例如,假設您要爲2個客戶創建4個訂單,每個訂單包含5個產品。您的客戶數據將被重複每個客戶10次。

編輯:我應該注意到,我對這個問題的回答是強調「是」。我有興趣聽取有關替代方案的論點...

+0

說實話,這正是我的想法,但我只是想檢查一下,這樣做沒有造成巨大的性能損失/靈活性損失,因爲這不是其他開發人員目前想要做的。 – Siyfion 2012-02-14 09:22:17

+0

我已經添加了第二個示例,但我仍然無法看到將它們全部放在一個表中的原因,除非這樣做會導致性能成本。 MySQL或Azure將成爲後臺FYI的存儲機制。 – Siyfion 2012-02-14 09:32:40

+0

一旦您擁有使用該持久對象的活動應用程序,您可能會遇到性能問題。我已經在使用這種設置的遺留表格上工作過了,試圖確定一個獨特的記錄而不在謂詞中包含很多字段是很痛苦的......但那是我個人的經驗。 – 2012-02-14 09:33:51