4

我有一个PARTNER有两个主键的表:

CREATE TABLE PARTNER (
    PARTNER_TYPE nvarchar(2) -- Primary key
    PARTNER nvarchar(10)     -- Primary key
    NAME nvarchar(25)
)

我还有一个LOCATION引用两个合作伙伴的表。这些合作伙伴的类型不同(ClientEmployee),这意味着我需要为合作伙伴类型添加两列:

CREATE TABLE LOCATION (
    LOCATION_ID int
    PARTNER_TYPE1 nvarchar(2) -- This is always CL for client, can I hardcode this?
    CLIENT nvarchar(10)
    PARTNER_TYPE2 nvarchar(2) -- This is always EM for employee, can I hardcode this?
    EMPLOYEE nvarchar(10)

我知道我可以为上面的合作伙伴类型列设置默认值。但我想知道在创建外键时是否有任何方法可以“硬编码”这些默认值,所以我可以避免使用这两个合作伙伴类型列。非常感激。

4

1 回答 1

2

您可以将持久计算列用于LOCATION.

计算列

CREATE TABLE PARTNER (
    PARTNER_TYPE nvarchar(2) CHECK(PARTNER_TYPE IN (N'CL', N'EM')),
    PARTNER nvarchar(10),
    NAME nvarchar(25),
    PRIMARY KEY (PARTNER_TYPE, PARTNER)
)

CREATE TABLE LOCATION (
    LOCATION_ID int,
    PARTNER_TYPE1 AS N'CL' PERSISTED,
    CLIENT nvarchar(10),
    PARTNER_TYPE2 AS N'EM' PERSISTED,
    EMPLOYEE nvarchar(10),
    PRIMARY KEY (LOCATION_ID),
    FOREIGN KEY (PARTNER_TYPE1, CLIENT) REFERENCES PARTNER(PARTNER_TYPE, PARTNER),
    FOREIGN KEY (PARTNER_TYPE2, EMPLOYEE) REFERENCES PARTNER(PARTNER_TYPE, PARTNER)
)
于 2013-08-06T19:16:14.110 回答