2011-05-25 66 views
2

我正在從頭開始設計一個程序及其數據庫。對於以下情況(SQL 2008 R2,C#),最佳數據庫設計是什麼:數據庫的最大可擴展設計

該程序將銷售給具有不同需求的各種客戶。這就是爲什麼我試圖儘可能擴展它。在Code-Side中,我使用DI作爲基於插件的體系結構。

但是對於數據庫端:
每個客戶可能想也可能不想向用戶/實體添加額外的信息。使用不同的數據類型。我應該如何設計我的數據庫,以便能夠以最少的觸摸輕鬆添加其他數據?

  • 在所需表格中創建一個附加列,其中存儲有關XML或CSV格式實體的任何其他信息,並在代碼隱藏中解析。
  • 創建一個新表,其中包含一個實體的ID,並具有一個鍵/值對列和一個DataType列(例如Key="IsPremiumMember", DataType="boolean", value="true")並將其解析爲代碼隱藏。

您會建議哪種方法?爲什麼?
我應該考慮的其他解決方法?
謝謝。

+0

誰將託管數據庫?它會在您的服務器上還是在客戶的服務器上? – 2011-05-25 13:25:47

+0

這是對他們的。 – Kamyar 2011-05-25 13:27:06

+1

我會盡量避免** EAV **模式(鍵/類型/值) - 它非常靈活*,但是從SQL性能/可編程性角度來看,這是一個完全的噩夢。請參閱[Joe Celko關於避免銷燬EAV](http://www.simple-talk.com/sql/t-sql-programming/avoiding-the-eav-of-destruction/)或[第5點中的第3點避免簡單的數據庫設計錯誤](http://www.simple-talk.com/sql/database-administration/five-simple--database-design-errors-you-should-avoid/) – 2011-05-25 13:56:54

回答

2

我應該如何設計我的數據庫,以便能夠輕鬆添加其他數據,並且觸摸最少?

如果可能列的範圍是可枚舉的,那麼您可以使用標準列構建表,並允許客戶從可能列的列表中添加附加列。這將是靈活的,而不會在SQL中編碼太困難。

如果可能列的範圍未知,則可以使用鍵/類型/值模式。正如marc_s所說,它很靈活,但更難編碼SQL。

最後,您可以讓您的客戶使用他們希望的任何列來定義表格。您的軟件必須讀取數據庫系統列和數據庫系統索引表,以確定列名稱和索引路徑是什麼。這種軟件至少要難以編寫一個數量級,因爲SQL將由數據庫系統表的結果生成。