如果我不使用外键可以,当我可以使用它时,我只是不使用它?
例如,我的COUNTRY_STATE表应该将Country.Id作为外键,但我没有这样做,而是使用CountryCode。我通过CountryCode获取每个国家的州。
COUNTRY
-Id (PK)
-Code
-Name
COUNTRY_STATE
-Id (PK)
-Code
-Name
-CountryCode
答案 0 :(得分:4)
外键不一定需要引用主键。它还可以引用唯一约束。
因此,如果您想将country_code保留在country_state表中,您可以执行该操作并仍然使用外键来确保仅使用有效的国家/地区代码:
ALTER TABLE country
ADD CONSTRAINT uq_code UNIQUE (code);
ALTER TABLE country_state
ADD CONSTRAINT fk_state_country
FOREIGN KEY (country_code) REFERENCES country (code);
答案 1 :(得分:2)
不行,您违反了Referencial Integrity属性
答案 2 :(得分:0)
没有任何东西可以保证国家代码是唯一的,因此您在那里引入了可能的一对多关系。这意味着一个国家可能有一个以上的国家......这是不可取的。
答案 3 :(得分:0)
不使用nocheck的外键将允许查询优化器简化计划。这将允许更少的读取,这将提高查询性能。当行数增加时,这将对性能产生巨大影响。