アドレス可能なメンバーとユーザー定義のデータ型を定義するには?
-
21-08-2019 - |
質問
私は、MS SQL Serverデータベースにモデル化する異常な状況を持っている:表の主キーは、(固定サイズの)5つの外部キーからなるマルチセグメント「天然」のキーである
。私は、要素は、個々のフィールドとしてアドレス指定可能であるようにプリミティブ(8)CHARに基づいてデータ構造を実装するために、ユーザ定義のデータ型を定義できるようにしたいと思います。
(たとえば悪い擬似コードで)
UDT seggy
(
seg1 char(2),
seg2 char(1),
seg3 char(1),
seg4 char(2),
seg5 char(2)
)
create table yotable
(
pkfield seggy NOT NULL,
etc varchar(14), --whatever etc.
)
with pkfield as the primary key,
and also with seg1 as a foreign key to tableseg1,
and also with seg2 as a foreign key to tableseg2,
and so on
とし、このようなことを行うことができます:
insert into yotable (pkfield, etc) values ('abcdefgh','whatever')
select * from yotable where seg2 = 'c'
insert into yotable (seg1,seg2,seg3,seg4,seg5,etc)
values ('ab','c','d','ef','gh', 'whatever')
これまでのところ私が見つけたすべてはありません。この CodeProjectの記事であります十分に行くか、更なる情報のためのリンクを提供し、この初歩的な<のhref =「http://msdn.microsoft.com/en-us/library/aa933121(SQL.80).aspx」のrel =「nofollowをnoreferrer」ではありません> MSDNリンクするます。
どうやら私のGoogle-FUは大歓迎弱い今夜、すべてのリンク/ヒントです!
代替タイトル:どのようにSQL Server内の 'オーバーレイ' フィールドをシミュレートするために、
?MS SQL Server 2005以降想定/好ましい。
解決
でのUDTのフィールド、(外部キーは、列レベルである必要はありませんあなたが望む構造を有していることCLR UDTを定義することができますが、(1)あなたは、外部キーを維持することができません列)、および(2)CLR UDT(少なくとも、あなたの擬似コードであるものと比較)を実現するのは簡単ではありません。プラス、あなたの説明から、それは彼らが本当に意味的に別々の列あるように聞こえる、とあなたが探していることは利便性のためだけのショートカットです。 IMO UDTはおそらく、とにかくそのシナリオでの最善のアプローチではありません。
私は別々の列を維持する提案が、一緒にフィールドを連結し、列、または同じことをテーブル内の計算列を持つビューのいずれかを作成します。これは、いずれかの組み合わせ、または別表記を使用して検索を可能にします。あなたが構成部品に結合カラムに挿入/更新を分解する代わりにトリガーを使用することができます。