2010-12-08 74 views
0

我有一个名为People的表,其中一列是名为“properties”的xml字段。我用它来存储关于每个人的随机信息,基本上允许人们存储未来添加的任何额外字段,而无需重新设计数据库。并不是所有的人都会在他们的xml中拥有相同的元素。SQL 2005查看Xml数据

CREATE TABLE [dbo].[Person]( 
[PersonID] [bigint] IDENTITY(1,1) NOT NULL, 
[PersonType] [nvarchar](50) NULL, 
[Title] [nvarchar](5) NULL, 
[Forename] [nvarchar](60) NULL, 
[Surname] [nvarchar](60) NULL, 
[Company] [nvarchar](60) NULL, 
[Properties] [xml] NULL 
) 

的XML的一个例子是:

<PropertyList xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <Property Name="Class">Class A</Property> 
    <Property Name="CarRegistration">123456</Property> 
    <Property Name="MedicalNotes">None</Property> 
</PropertyList> 

我有需要访问这些数据的几个老接入前端数据库我的计划是创建该格式化的表格,以匹配每个前端视图其原始布局。为我们节省了重新开发接入前端的工作,因为他们很快就会被删除。但是,在我的新设计中,几个字段存储在XML属性中。无论如何,我可以创建一个表的可更新视图,其中有一列或多列保存回xml字段。

我可能想要创建一个名为“people_students”的表的视图,该表只返回当前存储在xml中的所有记录,其中PersonType =“Student”,其中一列称为“Class”。

回答

0

简短的回答是否定的。

但是,您可能能够使用临时表一起杂牌的东西(如你上面提到的,假设你的意思是表在未来的某一时刻被删除)和触发器。您需要在您的XML列上触发一个触发器,以便在有人更新该列时触发,并且您需要在非永久性表上更新XML的触发器。

不幸的是,它的丑陋。

0

您对这种方法有什么看法?

创建一个EAV表。当关联的记录数据提供给用户时,使用枯燥的XML填充表格。允许用户从EAV表中插入,更新或删除。当用户离开记录导航或按下保存从EAV表创建XML并更新数据库中的XML列时。根据用户更新的数据量和频率,EAV可以保留或删除。

+0

我本来打算为EAV的方法,但其他一些问题后,我在这里张贴的普遍共识是要抛弃EAV和使用文档而不是导向。我同意,除了这个问题外,管理/编程似乎更容易。我正在考虑按照临时表格来管理与您的建议类似的数据。我没有真正有能力更新前端代码,因为它们不是由我开发的,所以所有的更新都必须在数据库级别,你有什么想法,我可能会得到一些示例代码等?谢谢 – Jammy 2010-12-08 21:18:54