多列外键,具有硬编码参考值
Multi column foreign key, with hard coded reference value
我有一个 ValidationStatus table,其中包含以下(主键)列:
Attribute Code
ADDRESS INVALID
ADDRESS REFUTED
ADDRESS STORE
ADDRESS VERIFIED
EMAIL INVALID
EMAIL REFUTED
EMAIL STORE
EMAIL UNKNOWN
EMAIL VALID
EMAIL VERIFIED
是否可以在地址table和这个地址之间建立一个外键?
具体来说,每个地址都有一个验证状态;如果我可以对文本进行硬编码,它将是:
ALTER TABLE dbo.Addresses
ADD CONSTRAINT FK_Addresses_ValidationStatus
FOREIGN KEY('ADDRESS', ValidationStatus)
REFERENCES dbo.ValidationStatus(Attribute, Code)
你不能那样做。解决方案正在改变设计如下:
- 向 dbo.ValidationStatus
添加身份或唯一整数
创建指向新整数字段的外键
ALTER TABLE dbo.Addresses
ADD CONSTRAINT FK_Addresses_ValidationStatus
FOREIGN KEY(ValidationStatus)
REFERENCES dbo.ValidationStatus(NewUniqueField)
Addresstable添加约束,限制在地址验证范围内。对于此示例,假设您的地址验证是 1、2、3 和 4。因此创建一个检查约束,如
ALTER TABLE dbo.Address
ADD CHECK (ValidationStatus in (1,2,3,4))
这样你就可以利用外键的好处了。
另一种方法是拥有 2 个不同的状态 table 并使用简单的 FK。
注意:在第一种方法中,如果您有新状态,请记住更改检查约束。
另一种方法是使用字符和数字的组合,如 A1、A2、A3、A4 表示地址状态,E1、E2 等表示电子邮件状态。对于每个新条目,您需要选择一个角色。在这种情况下,您可以拥有一个简单的 FK 而无需多个 tables.
我有一个 ValidationStatus table,其中包含以下(主键)列:
Attribute Code
ADDRESS INVALID
ADDRESS REFUTED
ADDRESS STORE
ADDRESS VERIFIED
EMAIL INVALID
EMAIL REFUTED
EMAIL STORE
EMAIL UNKNOWN
EMAIL VALID
EMAIL VERIFIED
是否可以在地址table和这个地址之间建立一个外键?
具体来说,每个地址都有一个验证状态;如果我可以对文本进行硬编码,它将是:
ALTER TABLE dbo.Addresses
ADD CONSTRAINT FK_Addresses_ValidationStatus
FOREIGN KEY('ADDRESS', ValidationStatus)
REFERENCES dbo.ValidationStatus(Attribute, Code)
你不能那样做。解决方案正在改变设计如下:
- 向 dbo.ValidationStatus 添加身份或唯一整数
创建指向新整数字段的外键
ALTER TABLE dbo.Addresses ADD CONSTRAINT FK_Addresses_ValidationStatus FOREIGN KEY(ValidationStatus) REFERENCES dbo.ValidationStatus(NewUniqueField)
Addresstable添加约束,限制在地址验证范围内。对于此示例,假设您的地址验证是 1、2、3 和 4。因此创建一个检查约束,如
ALTER TABLE dbo.Address ADD CHECK (ValidationStatus in (1,2,3,4))
这样你就可以利用外键的好处了。
另一种方法是拥有 2 个不同的状态 table 并使用简单的 FK。
注意:在第一种方法中,如果您有新状态,请记住更改检查约束。
另一种方法是使用字符和数字的组合,如 A1、A2、A3、A4 表示地址状态,E1、E2 等表示电子邮件状态。对于每个新条目,您需要选择一个角色。在这种情况下,您可以拥有一个简单的 FK 而无需多个 tables.