2010-12-08 16 views
0

私は人のテーブルを持っている人の列の1つは、 "プロパティ"と呼ばれる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フィールドに戻って1つ以上の列を保存して、テーブルの更新可能なビューを作成できますか?

例えばPersonType = "Student"で、列の1つが現在xmlに格納されている "Class"と呼ばれるすべてのレコードを返す "people_students"というテーブルのビューを作成したいとします。

答えて

0

短い答えはノーです。

ただし、一時テーブル(あなたが将来のある時点で削除されたテーブルを意味することを想定し、上記のように)とトリガと一緒に何かをその場しのぎすることができるかもしれません。誰かがその列を更新したときに起動するXML列のトリガーが必要で、XMLを更新した非永続的な表にトリガーが必要です。

残念ながら、それは醜いです。

0

このアプローチについてどう思いますか?

EAVテーブルを作成します。関連するレコード・データがユーザーに供給されたときに、シュレッドされたXMLを表に入れます。 EAVテーブルからの挿入、更新、または削除をユーザーに許可します。ユーザーがレコードから離れてナビゲートするか、saveを押すと、EAVテーブルからXMLが作成され、DBのXML列が更新されます。 EAVは、データの量とユーザーの更新頻度に応じて、残されたり削除されたりする可能性があります。

+0

私はもともとEAVアプローチのために行くが、私は一般的なコンセンサスが代わりに向いEAVと使用文書を捨てることでしたここに掲載いくつかの他の質問の後にされました。私は、この問題を除いて、管理/プログラムするのがより簡単に思えたので、同意しました。私はあなたの提案に似ているデータを管理するために一時テーブルの行に沿って考えていました。私はあなたが私はいくつかのサンプルコードなどを取得する可能性があります任意のアイデアを持っていない、本当に彼らは私が開発していなかったとして、すべての更新は、データベース・レベルでなければならないであろうように、フロントエンドのコードを更新する力を持っていけませんか?ありがとう – Jammy

関連する問題