为了账号安全,请及时绑定邮箱和手机立即绑定

非主键的外键

非主键的外键

慕标琳琳 2019-08-16 17:23:28
非主键的外键我有一个保存数据的表,其中一行需要存在于另一个表中。所以,我想要一个外键来保持参照完整性。CREATE TABLE table1(    ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,    AnotherID INT NOT NULL,    SomeData VARCHAR(100) NOT NULL)CREATE TABLE table2(    ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,    AnotherID INT NOT NULL,    MoreData VARCHAR(30) NOT NULL,    CONSTRAINT fk_table2_table1 FOREIGN KEY (AnotherID) REFERENCES table1 (AnotherID))但是,正如你所看到的,表我是外键,列不是PK。有没有办法创建这个外键,或者更好的方法来维护这种引用完整性?
查看完整描述

3 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

正如其他人所指出的那样,理想情况下,外键将被创建为对主键(通常是IDENTITY列)的引用。但是,我们并不是生活在一个理想的世界中,有时甚至对模式的“小”改变也会对应用程序逻辑产生明显的连锁反应。

考虑具有SSN列(和哑主键)的Customer表的情况,以及还包含SSN列的Claim表(由Customer数据中的业务逻辑填充,但不存在FK)。该设计存在缺陷,但已经使用了好几年,并且已经在架构上构建了三种不同的应用程序。显而易见的是,剥离Claim.SSN并建立真正的PK-FK关系将是理想的,但也将是一次重大的改革。另一方面,对Customer.SSN设置UNIQUE约束,并在Claim.SSN上添加FK,可以提供参照完整性,对应用程序影响很小或没有影响。

不要误解我,我都是为了正常化,但有时候实用主义胜过理想主义。如果可以通过创可贴帮助平庸的设计,可以避免手术。


查看完整回答
反对 回复 2019-08-16
  • 3 回答
  • 0 关注
  • 1372 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信