XML与关系数据库

时间:2014-02-11 13:03:34

标签: sql sql-server

我正在研究一种基于云的解决方案,它可以让人们输入存储在SQL数据库中的信息。

我的应用程序的好处是人们还可以更改存储的信息类型(即管理员可以添加/删除某些属性来更改人们可以存储的数据)。

在关系数据库中执行此操作确实有效,但这意味着管理员将更改具有如此多风险和问题的数据库的实际结构,而且我真的不想沿着这条路走下去。

我考虑过使用XML,因此一个表包含两个表,例如:

模板数据 列(ID,XML) - 这将包含人们将输入的“默认模板/结构”,当用户输入数据并提交时将使用这些模板/结构

数据表 columns(ID,XML) - 这将使用我的第一列的XML模板包含实际数据,但将实际数据存储在其中

这听起来有效吗?我是否可能遇到潜在的性能问题?许多数据都是可搜索的,并且可能在数据库中有很多记录。 - 我想我可以查看将可搜索的数据存储在管理员无法修改的单独字段中。

由于

2 个答案:

答案 0 :(得分:1)

这是可能的,如果你做得有点聪明,那是可行的。

与Justings wroong回答相反,你不会遇到字符串操作和搜索....如果你真的小心阅读文档。

SQL Server很久以前就添加了一个XML字段类型。

这需要XML(仅)并在内部对其进行分解,并具有索引机制(cech http://technet.microsoft.com/en-us/library/ms191497.aspx以获取详细信息)。

查询看起来像:

SELECT 
    EventID, EventTime,
    AnnouncementValue = t1.EventXML.value('(/Event/Announcement/Value)[1]', 'decimal(10,2)'),
    AnnouncementDate = t1.EventXML.value('(/Event/Announcement/Date)[1]', 'date')
FROM
    dbo.T1
WHERE
    t1.EventXML.exist('/Event/Indicator/Name[text() = "GDP"]') = 1

(从How to query xml column in tsql复制)

它取决于你的程度 - 这在数据库上比较重,并且可能有局限性,但它与存储字符串和对任何索引说再见的替代方案相差甚远。

您实际上甚至可以添加xml架构,因此数据必须符合某些特定架构。

答案 1 :(得分:-1)

这是可能的,但如果您将根据XML字符串中的值查询数据,则数据检索将受到影响。如果您将使用它,那么您仍然坚持使用LIKE过滤器,建议不要搜索行数过多的表。如果您始终只使用ID列读取数据,我认为这会很棒。

另一方面,如果要将XML中的数据分成多个列,则可以优化基于多个列查询数据的方式。这将加快您的搜索速度,尤其是在列被编入索引时。