Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.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# 将数据另存为数据库中的xml,而不是保存多行数据_C#_Asp.net_Xml_Sql Server 2008_Linq To Xml - Fatal编程技术网

C# 将数据另存为数据库中的xml,而不是保存多行数据

C# 将数据另存为数据库中的xml,而不是保存多行数据,c#,asp.net,xml,sql-server-2008,linq-to-xml,C#,Asp.net,Xml,Sql Server 2008,Linq To Xml,我正在设计我的数据库,想知道处理这个问题的最佳方法。我在页面上有如下选项卡: Tab1 --SubTab1 ----Data1 --SubTab1 --SubTab1 Tab2 --SubTab1 --SubTab1 --SubTab1 Tab3 --SubTab1 --SubTab1 --SubTab1 我可以把这些信息放在数据库中,像这样存储在多行中 TypeID---------------Name 1--------------------Tab 2------------------

我正在设计我的数据库,想知道处理这个问题的最佳方法。我在页面上有如下选项卡:

Tab1
--SubTab1
----Data1
--SubTab1
--SubTab1
Tab2
--SubTab1
--SubTab1
--SubTab1
Tab3
--SubTab1
--SubTab1
--SubTab1
我可以把这些信息放在数据库中,像这样存储在多行中

TypeID---------------Name
1--------------------Tab
2--------------------Data


ObjectID----------Parent-------------TypeID
1-----------------0------------------1
2-----------------0------------------1
3-----------------0------------------1
4-----------------1------------------1
或者我可以这样把它放到数据库中:

<root>
     <tab name="MyTab">
          <tab name="MySubTab">
               <data>1234567890</data>
          </tab>
     </tab>
</root>

1234567890

如果我只从数据库中提取xml,那么我就不需要选择多行,我只需要选择一行,然后将xml解析成一个类,然后将数据传递给控制器。我只是想知道这是不是个好主意?如果我的网站在未来扩展,我会犯错误吗?随着网站变得越来越大,需要更多的功能,这会带来更多的维护吗

XML很难使用SQL查询。如果您认为永远不需要查询数据,那么可以使用XML。为了将来的灵活性,我可能会将数据存储在多行中。

如果您的数据是一大块xml,则无法使用数据库轻松搜索该数据。您需要在xml中搜索信息吗?分离数据将使任务更容易。

也许我误解了它,但似乎您正在决定是将数据保存为XML还是将其保存在表中,然后使用XML查询以返回它。如果是这样的话:

更容易查询,可以处理更多更改:如果您有很多更改,并且数据增长率很高,则最好将数据保存到表中,以后再查询。对于复杂的查询,您可以获得更多的选择


如果数据没有那么大的增长或变化,则速度会更快:如果数据不会经常变化,并且没有增长那么大的危险,那么您可以简单地使用XML将其保持在正确的语法中,从而降低性能影响。这种方法意味着您在查询正确的数据方面没有那么大的灵活性。

如果您正在考虑是否将XML存储在数据库中,那么是时候问问自己是否有必要将此数据存储在数据库中了

将这些数据存储在静态XML文件上怎么样?这是一个可行的选择吗?为什么,为什么不

如果此数据不经常更改,并且您不想投资数据库,但您仍希望确保将来可以使用CMS编辑此数据,然后还可以创建一个批处理过程,使用数据库中的数据创建静态XML文件,然后应用程序将完全忽略该数据在数据库中的事实,而只使用静态XML文件。批处理过程将按计划或按需运行

对于不经常更改的数据,这是一种可扩展、可维护且高效的解决此问题的方法

实现这一点的类似方法是使用服务器端技术(如ASP.net或PHP)从数据库表中为您生成XML,然后使用具有较长过期时间的输出缓存,以确保生成过程不会经常运行


一般来说,在数据库字段中存储非原始或复杂数据通常不是一个好主意。

如果使用SQL Server,我只会使用。虽然在TSQL中使用XML可以做到这一点,但有几个注意事项。最重要的一点是恢复有序的XML很糟糕,因为TSQL(2008)不正确/不完全支持
position()
。它需要一个到“indexer”列的有点混乱的连接。(如果您读回整个XML blob,这不适用,但这听起来像是在客户端手动解析的头痛)

Hierarchyid允许轻松保存这些级别,以更规范化的格式保留数据库(RDBMS设计用于在多个列上高效工作,只需确保具有正确的索引),并且通常应该更易于处理—特别是在您还没有准备好进入存储过程的情况下:-)

hiearchyid表示父/子关系以及兄弟姐妹的顺序(它确实可以整理模型);它基于一个深度优先模型,适用于类似这样的任务

此外,使用XML可能不会保存任何内容(IIRC,[typed]XML实际上分解为某种内部列设置)。如果需要的话,将它(XML)用作“输入/输出”消息格式(或“文档”)要好得多


快乐SQL'ing。

我不需要在xml中搜索。我将获取整个xml,然后在类中解析它,然后在浏览器上显示数据。我希望不超过300行xmlYes,我需要将xml存储在数据库中,因为我将有数千行。我相信将它们存储在数据库中更容易。@Luke101数据库的工作效率非常高。它实际上会将(键入的)XML转换为内部相当于列的内容@Luke101您对我提出的批处理方法或输出缓存方法有何看法?这并不难做到(排序需要一些技巧,这使它变得复杂,但是:-/)--如果您直接在TSQL(2008+)中编写语句,那么只需学习模式即可。也就是说,我不会为此使用XML,因为所说的“hack”是为了获得正确的排序(不正确支持
position()
)“相对而言,查询跨列和跨行分割的原始数据的效率较低”;这一点可能更为重要。即使存在黑客行为,它们仍然是黑客行为,并且可以获得与数据库相关的许多效率。