Database 最具可扩展性的数据库设计

Database 最具可扩展性的数据库设计,database,sql-server-2008,database-design,architecture,Database,Sql Server 2008,Database Design,Architecture,我正在从头开始设计一个程序及其数据库。对于以下场景(SQL 2008 R2,C#),最好的数据库设计是什么 该计划将出售给不同需求的客户。这就是为什么我要让它尽可能的可扩展。在代码方面,我将DI用于基于插件的体系结构 但对于db端: 每个客户可能希望也可能不希望向用户/实体添加其他信息。使用不同的数据类型。我应该如何设计我的数据库,使其能够以最少的触控轻松添加额外的数据 在所需的表中创建一个附加列,该列以XML或CSV格式存储有关实体的任何其他信息,并在代码隐藏中进行解析 创建一个新表,该表包

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

该计划将出售给不同需求的客户。这就是为什么我要让它尽可能的可扩展。在代码方面,我将DI用于基于插件的体系结构

但对于db端:
每个客户可能希望也可能不希望向用户/实体添加其他信息。使用不同的数据类型。我应该如何设计我的数据库,使其能够以最少的触控轻松添加额外的数据

  • 在所需的表中创建一个附加列,该列以XML或CSV格式存储有关实体的任何其他信息,并在代码隐藏中进行解析
  • 创建一个新表,该表包含实体的ID,并具有一个键/值对列和一个数据类型列(例如,
    key=“IsPremiumMember”,DataType=“boolean”,value=“true”
    ),并在代码隐藏中对其进行解析
您建议采用哪种方法?为什么?
还有其他我应该考虑的方法吗? 多谢各位

我应该如何设计我的数据库,使其能够以最少的触控轻松添加额外的数据

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

如果可能列的范围未知,则可以使用键/类型/值模式。正如marc_所说,它很灵活,但编写SQL代码更困难


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

谁将主持数据库?它是在您的服务器上还是在客户的服务器上?我会尽量避免EAV模式(键/类型/值)-它非常灵活,但从SQL性能/可编程性的角度来看,这完全是一场噩梦。看到或