如何设计这个数据库来避免循环依赖?

Sha*_*shi 13 database-design

有两个表:

  1. 用户
  2. 地址

用户包含对地址的引用。

地址包含列 CreatedBy 和 ModifiedBy,这是对用户的引用。

如何设计此数据库以避免循环依赖?

Dam*_*vic 8

与其寻找技巧和窍门(包括延迟约束),我建议您简单地设计出摆脱这种“参考锁定”的方式——所以尝试这样的事情:


事实

  • 用户(UserID)存在。
  • 地址(AddressID)是由用户创建的(UserID)
  • 地址(AddressID)创建于Date(DateCreated)
  • 地址(AddressID)最后被修改用户(UserID)日期(ModifiedOn)
  • 用户Date(UserID)居住在Address(AddressID)(ValidFrom)

约束

  • Each 地址是由exactly one 用户创建的。It is possible that more than one 地址是由the same 用户创建的。

  • Each 地址创建于exactly one DateIt is possible that more than one 地址创建于the same Date

  • For each 地址 and 日期that 地址at most one 用户that 日期修改。

  • For each 用户 and 日期that 用户日期起居住的at most one 地址that


逻辑的

在此处输入图片说明


就强制地址而言,请在应用程序层验证这一点并将加载语句包装到一个事务中——这样你将获得全部或一无所有。


Pol*_*usB 5

您别无选择,只能在下面的 2 个操作中创建循环依赖项,因为创建第一个表时不存在一个表。

CREATE TABLE A (A_ID INT PRIMARY KEY, B_FK INT);
CREATE TABLE B (B_ID INT PRIMARY KEY, A_FK INT REFERENCES A(A_ID));

ALTER TABLE A ADD B_FK INT;
Run Code Online (Sandbox Code Playgroud)

如果你想避免循环依赖。然后您需要删除一个 REFERENCES 约束,或者您可以通过一种方式添加 DELETE 和 UPDATE CASCADE 引用。如果您的逻辑有些复杂,您也可以实现 TRIGGER。