asp.net - 如何为可定制的应用程序设置数据模型

标签 asp.net sql-server data-modeling

我有一个供多个客户端使用的 ASP.NET 数据输入应用程序。该应用程序由所有客户端通用的多个数据输入模块组成。

我现在有多个客户想要添加他们自己的自定义模块,这些模块通常包含十几个数据点。有些值是文本,有些是数字,有些是下拉选择,等等。

我需要为此处理数据模型的建议。我对如何处理有两个想法。首先是为每个客户端的每个新模块创建一个新表。这很干净,但我不是特别喜欢它。我的另一个想法是为每个客户的每个自定义数据点创建一个包含列的表。这个表最终会包含很多列和很多 NULL 值。我不太喜欢这两种解决方案,并怀疑有更好的方法可以做到这一点,因此您的任何反馈都将不胜感激。

我正在使用 SQL Server 2008。

最佳答案

与这些问题一样,“这取决于”。

可怕的键值表。

这种方法依赖于一个表格,该表格将字段及其值作为单独的记录列出。

CustomFields(clientId int, fieldName sysname, fieldValue varbinary)

好处:
  • 无限灵活
  • 易于实现
  • 易于索引
  • 不存在的值不占用空间

  • 坏处:
  • 显示包含完整字段列表的所有记录的列表是一个非常脏的查询

  • 微软之道

    此类问题的微软方式是“稀疏列”(SQL 2008 中引入)

    好处:
  • 设计SQL Server的人有福了
  • 无需应用花哨的枢轴即可查询记录
  • 没有数据的字段不占用磁盘空间

  • 坏处:
  • Many technical restrictions
  • 新字段需要 DML

  • xml 税

    您可以向表中添加一个 xml 字段,该字段将用于存储所有“额外”字段。

    好处:
  • 无限的灵 active
  • 可索引
  • 存储效率(当它适合页面时)
  • 使用一些 xpath 体操,这些字段可以包含在平面记录集中。
  • 模式可以通过模式集合强制执行

  • 缺点:
  • 看不清楚该领域的内容
  • SQL Server 中的 xquery 支持存在缺陷,这有时会使获取数据成为一场真正的噩梦

  • 也许还有更多的解决方案,但对我来说,这些是主要的竞争者。选择哪一个:
  • 当额外字段的数量有限时,键值似乎是合适的。 (说不超过10-20左右)
  • 稀疏列更适合具有许多不经常填写的属性的数据。当您可以有许多额外字段时听起来更合适
  • xml 列非常灵活,但查询起来很痛苦。适用于很少写入和很少查询的解决方案。即:不要对存储在该字段中的数据运行聚合等。
  • 关于asp.net - 如何为可定制的应用程序设置数据模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7285566/

    相关文章:

    asp.net - 有没有好的 ASP.NET MVC2 或 MVC3 备忘单可用?

    sql - 从存储过程生成架构

    sql - SELECT 与其他列值的条件不同

    MySQL,每个找到的记录加入不同的父表

    c# - HTTP 错误 403.14 - 禁止调试 ASP.NET Web 应用程序

    asp.net - 如何在 ASP 中设置 LoggedInTemplate 的样式?

    php - 当数据库与 PHP 代码不在同一台机器上时,为什么 PHP -> MSSQL 非常慢

    excel - 如何阻止数据透视表过滤破坏我的 14 天滚动平均度量?

    sql - 成绩数据库表

    asp.net - 将 VISUAL STUDIO 2010 Web 应用程序部署到 azure 云服务