Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何为自定义应用程序设置数据模型_Asp.net_Sql Server_Data Modeling - Fatal编程技术网

Asp.net 如何为自定义应用程序设置数据模型

Asp.net 如何为自定义应用程序设置数据模型,asp.net,sql-server,data-modeling,Asp.net,Sql Server,Data Modeling,我有一个由多个客户端使用的ASP.NET数据输入应用程序。该应用程序由所有客户端通用的多个数据输入模块组成 我现在有多个客户端希望添加自己的自定义模块,这些模块通常由十几个左右的数据点组成。有些值是文本,有些是数字,有些是下拉选择,等等 我需要一些建议来处理这个数据模型。关于如何处理,我有两个想法。首先是为每个客户机的每个新模块创建一个新表。这很干净,但我不特别喜欢。我的另一个想法是为每个客户机的每个自定义数据点都有一个表和列。这个表最终会有很多列和很多空值。我真的不喜欢这两种解决方案,并怀疑有

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

我现在有多个客户端希望添加自己的自定义模块,这些模块通常由十几个左右的数据点组成。有些值是文本,有些是数字,有些是下拉选择,等等

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


我使用的是SQL Server 2008。

我建议您使用您描述的第一个选项。我不会想太多的。在我看来,你概述的第二个选择是个坏主意


如果您添加到系统中的所有模块都有公共字段,则应考虑将这些模块保存在单个表中,然后将具有特定于特定模块的字段的其他表返回到公共表中的主键。这基本上是表继承(h),将集中公共模块数据,并使跨模块查询更容易。

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

可怕的键值表。

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

CustomFields(clientId int, fieldName sysname, fieldValue varbinary)
好处:

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

  • 显示包含完整字段列表的所有记录的列表是一个非常肮脏的查询
微软之路

Microsoft解决此类问题的方法是“稀疏列”(在SQL 2008中引入)

好处:

  • 受到SQL Server设计人员的祝福
  • 可以查询记录,而不必应用奇特的数据透视
  • 没有数据的字段不会占用磁盘空间
缺点:

  • 新字段需要DML
xml税

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

好处:

  • 无限的灵活性
  • 可以索引
  • 存储效率(当它适合页面时)
  • 通过一些xpath技巧,字段可以包含在平面记录集中
  • 可以使用架构集合强制架构
缺点:

  • 看不清现场有什么
  • SQL Server中的xquery支持存在漏洞,这使得获取数据有时成为一场真正的噩梦
也许有更多的解决方案,但对我来说,这些是主要的竞争者。选择哪一个:

  • 当额外字段的数量受到限制时,键值似乎是合适的。(不超过10-20左右)
  • 稀疏列更适合于具有许多不经常填写的属性的数据。如果可以有许多额外字段,听起来更合适
  • xml列非常灵活,但查询起来很麻烦。适用于很少编写和很少查询的解决方案。ie:不要对存储在此字段中的数据运行聚合等

+1组织良好,信息丰富。我添加了一个指向XMLEAV选项的链接。