我有一个不寻常的情况中一个MS SQL Server数据库模型:一个表的主键是5个外键(固定大小)

的多段的“自然”键组成。

我想能够定义基于CHAR(8)以这样的方式,该元件是可寻址的单个字段原始来实现数据结构的用户定义的数据类型。

例如(在坏伪代码):

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上的文章这确实还远远不够,或提供进一步的信息链接,这个简陋的 MSDN链接

显然我的谷歌福今晚薄弱,任何链接/提示不胜感激!

替代标题:如何模拟 '覆盖' 在SQL SERVER领域

MS SQL Server 2005或更高假定的/优选的。

有帮助吗?

解决方案

您可以定义您想要的结构的CLR UDT,但(1)您将无法保持外键(外键必须在列级,而不是一个领域的一个UDT列),和(2)这是不平凡实现CLR UDT(至少比什么是你的伪代码)。此外,从你的描述,这听起来像他们真的是单独的列语义,你要查找的内容仅仅是为了方便的快捷方式; IMO一个UDT可能不是在那种情况下,最好的办法呢。

我建议保持单独的列,而是创建要么具有串接的字段一起列的图,或者在不相同的表计算列。这将允许使用任一组合或单独的符号搜索。然后,可以使用INSTEAD OF触发器以组合的列上的分解插入/更新到组成部件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top