gpt4 book ai didi

database - 如何让两个实体部分参与 1 :1 relationship

转载 作者:搜寻专家 更新时间:2023-10-30 20:23:56 24 4
gpt4 key购买 nike

我以 SubjectLecturer 之间的关系作为具体示例。这意味着有一个主题可能仅由一个讲师和一个讲师<提供 可能 仅提供一个 主题。如何让两个实体部分参与关系数据模型(逻辑数据模型)中的 1:1 关系?我需要多少张 table 以及如何构建它们?我卡住了。

最佳答案

已编辑

第一种方法:此方法基于数据建模:

条件 1 (c1):一个 subject 可能由只有一个 讲师提供/p>

条件 2 (c2):和一个讲师可以提供只有一个subject

要应用 c1:您有两个选择:

  1. 讲师 的 P.K 转换为 F.K 给主题。它也可以是 NULL。但是如果只有一个lecturer提供的subject,就把lecturer的P.K放在里面。此选项具有无效
  2. 为避免无效化,创建另一个包含两列(subject_idlecturer_id)的表subject_lecturer(仅用于使用此条件)。它们是原始表中的 F.K(subjectlecturer)。在此新表中,您仅保存可能仅由一位讲师提供的主题。因此,您应该将 subject_id 设置为 UNIQUE。因此,您只能将一个主题插入到此表中。

要应用 c2:您有与 c1 类似的选项。

  1. 与 c1 中的选项 1 相同。
  2. 与 c1 中的选项 2 相同。但是你应该为此创建另一个表 (lecturer_subject)。在这个新表中,您应该将 lecturer_id 设置为 UNIQUE。因此,您只能将一位讲师插入到此表中。

我们可以合并它们吗(subject_lecturer , lecturer_subject):
基于数据建模概念 (ER),您在 c1 和 c2 中有不同类型的数据。

第二种方法:但是,有一种解决方案可以将它们合并。

将它们合并到一个表中(subject_lecturer_allinone)并使用可以是0type列c1 记录 1 用于 c2 记录。

subject_lecturer_allinone
subject_id is F.K and refers to Subject table
lecturer_id is F.K and refers to lecturer table
type : only can be 0 (for c1 records) and 1 (for c2 records)

我们应该使用 2 个 UNIQUE 约束来处理即将到来的数据。

(lecturer_id , type) when the value of type is 1
(subject_id , type ) when the value of type is 0

这不是 ER 解决方案,您应该编写一些函数或触发器来处理它。

关于database - 如何让两个实体部分参与 1 :1 relationship,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48373206/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com