2010-06-28 44 views
0

我有一個關於C#4.0,MS SQL和通過ADO.NET實體數據模型生成的業務對象的(有點泛泛)的問題。擴展業務模型並將其存儲在數據庫中

比方說,我得到了MS SQL表foo與行:

  • ID唯一標識符
  • TITLE爲nvarchar(20)
  • 說明文本
  • ADDITIONALDATA圖片

我最初的想法是將自定義數據(擴展屬性及其值)序列化爲 ADDITIONALDATA字段。

但現在的問題 - 我可以在哪裏指定這些附加屬性?在配置文件(即web.config)中?還是有其他的/標準的方式來實現這一目標?

回答

1

你能提供關於你到底想要存儲什麼的更多細節嗎?如果你在「ADDITIONALDATA」中有一些序列化的對象,那麼它幾乎不可能使用任何其他工具來訪問你的數據,例如報告工具。

在大多數情況下,您應該建模實際存儲在數據庫中的內容。屬性可以(大致)等同於數據庫中的大部分時間。這使您可以在某種程度上解耦您的數據庫和應用程序。否則,你的應用程序將是唯一知道如何讀取數據庫的東西。

編輯:

你可以使用實體 - 屬性 - 值模型,雖然有很多這種做法潛在的隱患。另一種可能性是將數據作爲XML存儲在列中。同樣,這不是沒有問題。儘管您至少可以使用SQL的XML函數在XML中搜索,但它不會有很好的性能。問題在於,你想爲一個沒有完全充實的問題提出一個通用的解決方案。你採取的任何方法都會因此而出現問題。如果我必須選擇,我可能會用EAV模型去做,就像我討厭它一樣,用XML緊隨其後。

+0

那麼這個想法是提供一個用戶指定自定義產品屬性。所以會有一組基本的屬性,比如價格,重量......但我想提供一種設置更多屬性的可能性 - 比如說 - 顏色和尺寸(或者其他我現在無法想到的奇特的東西,這就是要點)。有不同的方法嗎? – 2010-06-28 14:44:50

+0

我對此的回答有點長,所以我把它作爲對我答案的修改。 – 2010-06-28 14:58:27

+0

謝謝,這個EAV模型聽起來不錯,我會試試看。在wikipedia上閱讀它時,我發現了熟悉的術語備用矩陣 - 我不知道這個「模型」可以應用於數據結構。 – 2010-06-28 15:11:21

1

因此,如果您計劃將某些數據序列化並將其放入列(ADDITIONALDATA)中,則首先應注意您的設計,但該列不應爲類型圖像。如果你使用XML類型,你將能夠存儲數據,你可以查詢它,儘管查詢它會有點痛苦。如湯姆H所指出的,你的設計有一些缺陷。你會發現大部分時間你會看到3個表格用於你想要完成的任務。

  1. 表存儲Foo。
  2. 用於存儲Foo屬性類型的表。 Foo_Att_ID,Foo_Att_Name
  3. 用於存儲其他Foo屬性類型的值的表。 Foo_ID,Foo_Att_ID,值
+0

謝謝你的回答! – 2010-06-28 15:09:24

相關問題