【发布时间】:2011-09-01 18:43:21
【问题描述】:
我正在从头开始设计一个程序及其数据库。以下场景的最佳数据库设计是什么(SQL 2008 R2,C#):
该程序将出售给具有不同需求的各种客户。这就是为什么我试图让它尽可能地可扩展。在代码端,我将 DI 用于基于插件的架构。
但是对于数据库端:
每个客户可能希望也可能不希望向用户/实体添加附加信息。具有不同的数据类型。我应该如何设计我的数据库,以便能够以最少的接触轻松添加额外的数据?
- 在所需表中创建一个附加列,该列以 XML 或 CSV 格式存储有关实体的任何其他信息,并在代码隐藏中解析。
- 创建一个新表,其中包含一个实体的 ID,并具有一个键/值对列以及一个 DataType 列(例如
Key="IsPremiumMember", DataType="boolean", value="true"),并在代码隐藏中对其进行解析。
您会建议哪种方法以及为什么?
我应该考虑其他任何解决方法吗?
谢谢。
【问题讨论】:
-
谁来托管数据库?它会在您的服务器上还是在客户的服务器上?
-
我会尽量避免使用 EAV 模式(键/类型/值) - 它非常灵活,但 SQL 性能却是一场噩梦/可编程性的观点。见Joe Celko on Avoiding the EAV of Destruction 或Point #3 of Five Simple Database Design Errors To Avoid
标签: database sql-server-2008 database-design architecture