0

在我的 ERD 中,我有一个不相交的强制性关系。请参阅以下示例。

在此处输入图像描述

** 假设“Teen”和“Adult”实体有自己独特的属性。

如何映射这种关系。以及如何在表格中实现这一点。

[据我所知,您必须创建两个名为“Teen”和“Adult”的表。两者都有相同的主键“st_id”。但问题是,在两个表中,“st_id”必须是唯一的,因为关系是强制性的。如何实现?]

例子:

**Teen**                               
st_id | name
001     AA
002     BB

**Adult**
st_id | name
(as the st_id you can't have the value 001 again since it is already in the Teen table)
4

2 回答 2

1

为什么不像这样为青少年和成人使用 1 张桌子

person
------
id         int
name       varchar
is_adult   bit

study
-------
id         int
person_id  int
...
于 2013-10-10T07:04:13.183 回答
1

是什么阻止您拥有三张桌子:

STUDENT [PK: st_id] (optionally also an attribute of type BOOLEAN or similar, "is_teen" or "is_adult")
TEEN    [PK: st_id]
ADULT   [PK: st_id]

我们将为每个新学生在 STUDENT 中添加一行;每次添加学生时,如果新学生是青少年,则创建一个 TEEN 行,否则创建一个新的 ADULT 行。
在任何一种情况下,要使用的 st_id 都是新学生的。TEEN 和 STUDENT 中的 st_id 将互斥,但所有 st_id 都将指向相应的 STUDENT 行。

您的 ERD 片段似乎适用于逻辑数据模型;我已将其直接复制到物理实现中。在现实世界中,我们通常会将 TEEN 和 ADULT 属性“汇总”(非规范化)到 STUDENT 实体中,以限制获取所有信息所需的加入量。可用于给定的学生。

或者,您可以选择在 STUDENT 和 TEEN 之间以及 STUDENT 和 ADULT 之间定义一对外键关系。

于 2013-10-10T08:28:01.367 回答