2011-09-02 82 views
4

我有一個由多個客戶端使用的ASP.NET數據錄入應用程序。該應用程序由多個數據輸入模塊組成,這些模塊對所有客戶端都是通用的如何爲可定製應用程序設置數據模型

我現在有多個客戶想要添加自己的自定義模塊,通常由十幾個數據點組成。一些值將文本,其他數值,一些將是下拉選擇等。

我需要處理數據模型的建議。我對如何處理有兩點想法。首先將爲每個客戶端的每個新模塊創建一個新表。這很乾淨,但我不特別喜歡它。我的另一個想法是爲每個客戶端的每個自定義數據點都有一個包含列的表。這個表最終會有很多列和很多NULL值。我不太喜歡這兩種解決方案,並且懷疑有更好的方法可以做到這一點,所以你的任何反饋都會被讚賞。

我使用SQL Server 2008的

回答

2

與以往一樣,這些問題「取決於」。

可怕的鍵值表。

該方法依賴於一個表,其中列出了字段及其值作爲單獨的記錄。

CustomFields(clientId int, fieldName sysname, fieldValue varbinary) 

優點:

  • 無限靈活
  • 容易實現
  • 易於指數
  • 不存在的價值不採取任何空間

缺點:

  • 顯示的完整字段列表中所有記錄的列表是一個非常骯髒的查詢

微軟的方式

這類問題的微軟的方法是「稀疏列」(介紹在SQL 2008)

優點:

  • 由PEO有福

    • Many technical restrictions
    • 一個:PLE誰設計的SQL Server
    • 記錄可以不必申請花哨的樞軸
    • 字段沒有數據不佔用磁盤

    缺點空間查詢新領域需要DML

xml稅

您可以將xml字段添加到將用於存儲所有「額外」字段的表中。

優點:

  • 無限的靈活性
  • 可以被索引
  • 存儲高效的(當它在一個頁面適合)
  • 對於某些xpath的體操字段可以被包括在一個平坦的記錄集。
  • 模式可以與架構集合強制執行

缺點:

  • 不能清楚地看見什麼領域
  • 的XQuery在SQL Server的支持有差距,這使得有時讓你的數據的真正的噩夢

也許有更多的解決方案,但對我來說這些是主要的競爭者。選擇哪一個:

  • 鍵值似乎是適當的時候額外的字段的數量是有限的。 (比如說不超過10-20左右)
  • 稀疏列更適合具有很多不常出現的屬性的數據。聽起來更合適,當你可以有很多額外的字段
  • xml列非常靈活,但很難查詢。適用於很少寫入和查詢的解決方案。即:不要對存儲在該字段中的數據運行聚合等。
+0

+1組織良好,信息豐富。我添加了一個鏈接到xml-eav選項。 –

+0

修正了降價。 –

0

我建議你去與你所描述的第一個選項。我不會認爲它。在我看來,你列出的第二個選項是一個壞主意。

如果有共同所有要添加到系統中的模塊,你應該考慮讓那些在一個表中,然後有其他的表格與字段特定於通用相關返回主鍵的特定模塊領域表。這基本上是表繼承(h ttp://www.sqlteam.com/article/implementing-table-inheritance-in-sql-server),並將集中公共模塊數據並使其更容易跨模塊進行查詢。

相關問題