0

假设我正在使用参照完整性,并且我在两个实体(A 和 B)之间有关系,并且双方的最小基数为 1。这意味着在可以填充表 A 之前,表 B 需要表 A 可以的记录被链接到。但是由于两边的最小基数都是1,反过来也可以这样说,即A表中需要有一条记录可以链接到B表中的一条记录,然后该记录才能插入到表中B.

现在这似乎有问题,因为如果我理解正确,引用完整性会强制您将记录链接到另一个表中的另一个记录,在这两种情况下,这意味着我不能在任何一个表中输入任何记录......

有人可以解释在这种情况下会发生什么吗?

我问了我的老师同样的问题,她说至少基数为 1..1 的关系(这个符号是否正确?)当然是可能的,但她无法向我解释应该首先填写哪个表。

对不起,我没有任何具体的例子,我只是在随机考虑这个......如果你可以通过在你的答案中使用一个实际的例子来详细说明,那就太好了。

4

2 回答 2

1

你的情况似乎不正确。

在一对一的关系中,必须有一个表父,另一个是子表。

让我们考虑一下您有一个用户表和一个用户配置文件表。在这种情况下 user_profile 属于用户。在拥有用户之前,您无法创建 user_profile。即用户表是父,user_profile 是子表。并且属于将包含父表的id。

在 user 和 user_profile 场景中,user_profile 表将保存 user_id,您需要先创建用户对象,然后将此 id 传递给 user_profile 并创建 user_profile。

因此,在您的场景中,您需要找到哪些是您的父母,哪些是您的孩子。如果不是这种情况,您将始终使用鸡蛋。

于 2014-09-15T15:18:09.943 回答
0

对于这个问题,您假设从用户的角度来看,DBMS 一次只能操作一个表,而事实并非如此。

在概念级别,当然可以有两个具有一对一基数的实体。

在关系数据模型的逻辑级别上,这意味着一个关系中候选键的值集必须精确地等于另一个关系中候选键的值集。

在大多数 DBMS 的物理级别上,这种完整性约束将作为外键约束来实现。

在大多数 DBMS 中,确实是一次只能操作一个表。

在这种情况下,如果在每条语句之后检查约束,则必须选择一个表作为“父”表,并将一个表作为“子表”。表的操作必须以正确的顺序完成,这样在任何语句之后都不会违反外键约束。在触发器等中可能需要额外的验证,以确保每个父级只有一个孩子。

但是,如果可以推迟对约束的检查,以便在提交更改之前不检查它们,则可以指定两个外键约束;第一个表和第二个表之间的一个,第二个表和第一个表之间的相反。只要在提交更改时没有违反任何约束,就可以按任何顺序对表进行操作。但是,从用户的角度来看,在多语句事务的中间,违反了约束。

还有多重赋值的概念。这是对多个表的操作被视为单个原子操作。在这种情况下,单个语句将需要操作两个表,以便在语句末尾不违反约束。在这种情况下,从用户的角度来看,约束是并且永远不会被违反。有支持这些多重分配的非商业 DBMS。

您可能希望阅读 Chris Date 和 Hugh Darwen 的第三份宣言,其中介绍了多重分配的概念。

于 2014-09-26T22:32:09.530 回答