如何建立强制性、非识别性的关系

如何建立强制性、非识别性的关系

我正在使用 MS Visio 2010。这是我的 ERD 的相关部分:

内皮生长因子受体

Event 和 Adventure 之间的关系是正确的:从 Event 到 Adventure 有一个外键,并且该 FK 是 Event 主键的一部分。

但是,我无法弄清楚如何使 Adventure 到 AccomodationType 的关系线与 Event 到 Adventure 的关系线相同,而不使该关系成为冒险的 PK 的一部分。当我查看该关系线的“杂项”属性时,我希望它是:

  • 基数:零个或更多
  • 关系类型:无法辨认
  • 孩子有父母:非可选(强制)

但是,当我将关系设为非识别/识别时,第三个属性的复选框变灰,并在 True/False 之间切换。

我能想到的唯一方法是断开两列的连接,从“定义”选项卡中,然后取消“可选”复选框的灰色,但这样我就丢失了 accomType 列上的外键属性,虽然关系符号是正确的,但线仍然是虚线。

如何才能使左边线的基数与右边的关系线看起来相同,而无需将 accomType 添加到 Adventure 的 PK?

答案1

此 MS TechNet 线程确定问题与 Visio 2010 在创建实体之间关系时自动插入外键的方式有关:

确实,似乎先输入外键字段名称,然后建立关系就可以实现这一点。选中/取消选中外键上的 Req'd 会自动选中/取消选中关系上的 Optional。

有两种方法可以解决这个问题,具体取决于您是在图表上创建新的关系还是尝试修复现有关系。

如何建立强制性、非识别性的关系

在创建关系之前,使用与父实体主键相同的名称将所需的 FK 属性添加到子实体。确保每个 FK 属性都选中了“Req'd”选项。

在您的示例中,我们向 Adventure 实体添加了一个“name”属性:

现在添加关系会自动创建 FK,但会保留 Adventure 上现有属性的非识别、非可选状态:

此时您可以随意重命名 FK 属性。

请注意,“子级有父级:可选”复选框仍处于灰色状态。即使在此之后,更改关系的属性和/或所涉及的属性有时也会产生不良的副作用,您可能会发现错误的鱼尾纹符号再次“卡住”。幸运的是,有一种比删除关系并重新开始更快的方法来解决这个问题。

如何修复现有的关系

选择具有“卡住”鱼尾纹符号的关系,然后转到数据库属性窗口中的定义选项卡。

您将看到一条带箭头的线连接父实体和子实体中的 PK 和 FK 属性。选择两个表中连接的属性,然后单击中间列中的按钮断开它们。如果键是复合的,您将看到多对属性:

断开关系中涉及的所有属性后,“杂项”选项卡中的“子级具有父级:可选”框将再次变为活动状态。将关系的属性设置为非标识且父级为可选,仔细检查子实体中的 FK 属性是否设置为“必需”,然后返回到“定义”选项卡并重新关联 PK 和 FK 属性:

答案2

Visio 在创建新关系时会自动添加外键列。要更改关系的强制项,只需设置此列的必需属性(在实体属性、选项卡列中)。

相关内容