我有一个ValidationStatus表,其中包含以下(主键)列:
Attribute Code
ADDRESS INVALID
ADDRESS REFUTED
ADDRESS STORE
ADDRESS VERIFIED
EMAIL INVALID
EMAIL REFUTED
EMAIL STORE
EMAIL UNKNOWN
EMAIL VALID
EMAIL VERIFIED
是否可以在地址表和此地址表之间建立外键?
具体来说,每个地址都有一个验证状态;如果我能对文本进行硬编码,那就是:
ALTER TABLE dbo.Addresses
ADD CONSTRAINT FK_Addresses_ValidationStatus
FOREIGN KEY('ADDRESS', ValidationStatus)
REFERENCES dbo.ValidationStatus(Attribute, Code)
答案 0 :(得分:1)
创建指向新整数字段的外键
ALTER TABLE dbo.Addresses
ADD CONSTRAINT FK_Addresses_ValidationStatus
FOREIGN KEY(ValidationStatus)
REFERENCES dbo.ValidationStatus(NewUniqueField)
向Address表添加约束以限制地址验证范围的范围。对于此示例,假设您的地址验证是1,2,3和4.因此创建一个检查约束,如
ALTER TABLE dbo.Address
ADD CHECK (ValidationStatus in (1,2,3,4))
这样您就可以使用外键的好处。
另一种方法是拥有2个不同的状态表并使用简单的FK。
注意:在第一种方法中,如果您有新状态,则必须记住更改检查约束。
另一种方法是使用字符和数字组合(如A1,A2,A3,A4)进行地址状态,使用E1,E2等进行电子邮件状态的组合。对于每个新的entiry你需要选择一个角色。在这种情况下,你可以拥有一个简单的FK而不需要多个表。