【问题标题】:Most extensible design for database最可扩展的数据库设计
【发布时间】:2011-09-01 18:43:21
【问题描述】:

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

该程序将出售给具有不同需求的各种客户。这就是为什么我试图让它尽可能地可扩展。在代码端,我将 DI 用于基于插件的架构。

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

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

您会建议哪种方法以及为什么?
我应该考虑其他任何解决方法吗?
谢谢。

【问题讨论】:

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


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2012-12-05
    • 2011-02-14
    • 2012-01-06
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    相关资源
    最近更新 更多