最可扩展的数据库设计

时间:2011-05-25 13:23:09

标签: database sql-server-2008 database-design architecture

我正在从头开始设计一个程序及其数据库。对于以下场景(SQL 2008 R2,C#),最佳数据库设计是什么:

该计划将出售给有不同需求的各种客户。这就是为什么我试图让它尽可能地扩展。在Code-Side,我使用DI作为基于插件的架构。

但对于db-side:
每个客户可能希望也可能不希望向用户/实体添加其他信息。具有不同的数据类型。我应该如何设计我的数据库,以便能够以最小的触摸轻松添加其他数据?

  • 在必需的表中创建一个附加列,该列以XML或CSV格式存储有关该实体的任何其他信息,并在代码隐藏中进行解析。
  • 创建一个新表,其中包含实体的ID,并具有键/值对列以及DataType列(例如Key="IsPremiumMember", DataType="boolean", value="true")并在代码隐藏中解析它。

您会建议采用哪种方法?为什么? 我应该考虑的其他解决方法吗? 谢谢。

2 个答案:

答案 0 :(得分:2)

  

我应该如何设计我的数据库,以便能够以最小的触摸轻松添加其他数据?

如果可能列的Universe是可枚举的,那么您可以使用标准列构建表,并允许客户端从可能列的列表中添加其他列。这将是灵活的,而不会在SQL中编码太难。

如果可能列的Universe未知,则可以使用Key / Type / Value模式。正如marc_s所说,它很灵活,但编写SQL代码更加困难。

最后,您可以允许您的客户使用他们希望的任何列来定义表。您的软件必须读取数据库系统列和数据库系统索引表,以确定列名和索引路径是什么。这种软件至少要编写一个数量级,因为SQL会由数据库系统表的结果生成。

答案 1 :(得分:1)

你可能会在这里得到一些其他有用的想法...... Which one to use? EAV or Blobs in the database?

就个人而言,我倾向于使用已经提供完全可用的基于EAV架构的开发平台,或者使用基于RavenDB或Mongo的解决方案。