Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.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/7/sql-server/26.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
C# 何时/如何使用SQL Server XML数据类型?_C#_Sql Server_Xml - Fatal编程技术网

C# 何时/如何使用SQL Server XML数据类型?

C# 何时/如何使用SQL Server XML数据类型?,c#,sql-server,xml,C#,Sql Server,Xml,目前,我正处于一个新应用程序的设计阶段,我有一个设计问题,我想我可能可以提供一些建议 我使用专有连接连接到各种设备,每个设备都用一组数据响应,我根据机器类型将这些数据解析为一个漂亮的类。有些机器用不同的数据响应其他机器,但有一些共同点,因此我有一个简单的继承模型 - (abstract) Machine - Machine Type A - Machine Type B - Machine Type C “Machine”类型具有名称、IP地址之类的属性,这些属性对所有

目前,我正处于一个新应用程序的设计阶段,我有一个设计问题,我想我可能可以提供一些建议

我使用专有连接连接到各种设备,每个设备都用一组数据响应,我根据机器类型将这些数据解析为一个漂亮的类。有些机器用不同的数据响应其他机器,但有一些共同点,因此我有一个简单的继承模型

- (abstract) Machine
    - Machine Type A
    - Machine Type B
    - Machine Type C
“Machine”类型具有名称、IP地址之类的属性,这些属性对所有机器都是通用的

现在我来设计我的数据库,我不希望我的每个类都有一个不同的表。此外,我想保持灵活性,以适应任何新的机器将被添加到系统随着时间的推移

所以…我的想法是创建一个表,其中列表示任何“机器”的公共特性,然后是一个XML字段,其中包含关于特定机器的其余信息。通过这种方式,我认为我可以保持灵活性,而不会在数据库中有大量冗余的“null”值

这也将保持列倒计时,因为一台机器可能有30或40个不同的特征需要记录

由于我以前从未使用过XML数据类型,我想知道我是否以一种明智的方式处理这个问题?使用XML字段的含义是什么


还需要注意的是,我不太可能按XML中的任何字段进行搜索,只搜索公共字段。

取决于您需要使用这些自定义数据块中的数据的频率和频率

如果基本上需要将整个XML存储为blob,并且很少查询它,那么XML数据类型是一个非常好的选择。你可以通过查询来提取细节信息——这不是最有效的方法

如果特定数据是应用程序的核心和灵魂,并且您需要一直使用和查询这些数据,那么我可能只需要创建必要的关系表并以这种方式存储

XML数据类型很棒

  • 如果您大部分时间都需要XML格式的数据(例如,您从某个源获取数据,需要存储数据并可能将其转发到其他地方)

  • 如果您需要存储不经常查询和使用的数据


SQL Server中的XML数据类型工作得很好,但同样:可以对其进行查询,但速度相当慢(与查询关系表相比)。

我个人建议您避免将XML存储在数据库中。。我曾经在功能强大的服务器上使用过Oracle 10g。。一开始就可以了,但一旦开始查询数据,对XML性能中的值进行过滤就会开始急剧下降。。是的,您可以越来越深入地了解XMLDB的配置,但这可能会让您发疯

试着先阅读一些关于存储任意数据的其他问题,例如。


归根结底,就是要好好考虑一下您计划如何使用、提取和查询数据。

您会建议使用EAV模型作为替代方案吗?@AdamKing:不会!!看看为什么,看看这里有什么-不要这样做!