2010-12-08 71 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