加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 双向外键约束

发布时间:2020-12-12 16:22:10 所属栏目:MsSql教程 来源:网络整理
导读:我正在考虑设计类似于以下内容的数据库模式: Person ( PersonID int primary key,PrimaryAddressID int not null,...)Address ( AddressID int primary key,PersonID int not null,...) Person.PrimaryAddressID和Address.PersonID将是相应表的外键. 显而易
我正在考虑设计类似于以下内容的数据库模式:
Person (
  PersonID int primary key,PrimaryAddressID int not null,...
)

Address (
  AddressID int primary key,PersonID int not null,...
)

Person.PrimaryAddressID和Address.PersonID将是相应表的外键.

显而易见的问题是,无法在任何一个表中插入任何内容.有没有办法设计一个工作模式来强制每个具有主要地址的人?

解决方法

“我认为这是不可能的.在知道人员的ID之前,你不能创建一个地址记录,直到你知道了PrimaryAddressId字段的AddressId后才能插入人员记录.”

从表面上看,这种主张似乎很有吸引力.但是,它很有创意.

这是一个非常常见的问题,SQL DBMS供应商已经尝试攻击了几十年了.

关键是所有约束检查必须“延迟”,直到两个插入完成.这可以通过不同的形式实现.数据库事务可能会提供类似“设置延迟约束检查”的操作的可能性,并且您已经完成了(如果不是因为在这个特定的示例中,您可能必须非常努力地设计您的设计能够只定义两个FK约束,因为其中一个只是在SQL意义上不是’真正的’FK!).

这里描述的基于触发器的解决方案实现了基本相同的效果,但是这些解决方案暴露于应用程序强制完整性所存在的所有维护问题.

在他们的作品中,Chris Date&休达文描述了什么是这个问题的真正解决方案:多重任务.也就是说,实质上是组合几个不同的更新语句并让DBMS对其进行操作的可能性,好像这是一个单一的语句.这个概念的实现确实存在,但你找不到任何谈论SQL.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读