2009-06-30 9 views
0

ユーザテーブルからシステムへの関係を持つことは可能ですかテーブルビュー?文脈を与えるために、の値は、私のテーブルの1つのカラムのカラム名に限定してください。私のテーブルの別の1つです。これは、カラムを収めたシステムビュー2番目のテーブルの名前。システムテーブル/ビューとの関係はありますか?

私はCustomers(FirstName LastName)のテーブルを持っていたので、古典的な例を使用して、「FirstName」または「LastName」のみである列「customerAttribute」を持つ別のテーブルを作成したいと思います。このダイナミックを維持するためには、 "customerAttribute"カラムが実際にはCustomerテーブルのカラムの名前を格納するシステムビューからの外部キーであるといいでしょう。実際のCustomersテーブルで列の追加、削除、名前の変更が行われるため、データの整合性の問題について心配する必要はありません。

私はSQL Serverでこの関係を作成する簡単な方法を見ていないので、システムテーブルやビューとの関係をつかまえたり作成したりするのが大変なのですか?

ありがとうございます!

P.S.私はanother problem私がSOに投稿した解決するためにこの質問をする。

編集:直接システムビューと関係を作成できない場合でも、システムビューにクエリを戻したビューを作成して(列名を取得する)、そのビューとの関係を作成することができます。私は今それを試してみる。

+0

このように設計されたシステムで作業する必要はありません。 –

+0

それは合法かどうかわかりませんが、 申し訳ありません。 – Janusz

答えて

2

明らかに、システムテーブルの列を参照するユーザーテーブルの列を作成することはできません。明らかな答えは「はい」です。実際の質問に答えるには、別の質問をする必要があります。つまり、ユーザーテーブルにメタデータを格納するのは良い考えですか?

私がデータ管理の純粋主義の観点から答えるならば、これはほとんど常に悪い考えです。しかし、実用的な問題として、私はそれを誇りに思っていなくてもやった。データとメタデータをブレンドせずに達成することはほとんど不可能なデータとメタデータをブレンドすることによって得られる結果がいくつかあります。

あなたが実行するリスクは、結局のところ、問題の専門家にとって理にかなった属性の観点から文書化できないデータベースに終わることになります。言い換えれば、あなたのデータベースは自分自身とあなたの仲間だけが利用できるようになります。時にはそれが許容可能なリスクです。時々そうではありません。

0

私はそれが可能であるかどうかは確信していませんが、もしそうなら、あなたは確かに危険な地面を踏みにじっています...あなたはどのように列の名前を変更しますか?どうやって列を動かしますか?どのように列を削除しますか?このタイプのものはおそらくSSMSの中で大きく壊れてしまうでしょう。このタイプのものは、トリガーまたはコードロジックで処理する方が効果的です。

1

MSは警告なしで変更できるので、システムテーブルに依存することは常に悪い考えです。 information schema viewsは、移植性があり、メタデータを照会する必要があるアプリケーションをサポートすることを目的としています。

+0

これは問題ありません。しかし、ビューに依存関係を追加するのは悪いですか?それとも容認できますか? – JoeCool

+0

私はそれが受け入れられると思います。過去には、独自の "メタデータ"テーブルを維持する方法がありました。これは、情報スキーマなどの標準化された機能が利用可能な場合は明らかに愚かです。 –

+0

あなたが所有しているのは愚かなことです。この場合、マイクロソフトはそれらを所有しています。もちろん、マイクロソフトは決して標準には目を向けることはありません。 – dkretz