如何让两个实体部分参与 1:1 关系

How can I get partial participation of both entities in 1:1 relationship

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

已编辑

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

条件一(c1):有一个subject可能由只有一个[=13=提供]

条件 2 (c2): 并且 a lecturer 可以提供 只有一个 subject.

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

  1. lecturer 的 P.K 作为 F.K 转移到 subject。也可以是 NULL。但是如果一个subject只有一个lecturer提供,就把lecturer的P.K放在里面。此选项有 Nullification.
  2. 为了避免无效化,制作另一个 table subject_lecturer(仅用于使用此条件)两列(subject_idlecturer_id)。它们是原始 table 的 F.K(subjectlecturer)。在这个新的 table 中,您只保存 一个只能由一个 lecturer 提供的主题。所以你应该让 subject_id 成为唯一的。所以你只能在这个 table.
  3. 中插入一个主题

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

  1. 与 c1 中的选项 1 相同。
  2. 与c1中的选项2相同。但是你应该为此制作另一个 table (lecturer_subject)。在这个新的 table 中,您应该将 lecturer_id 设置为 UNIQUE。所以你只能在这个 table.
  3. 中插入一位讲师

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

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

将它们合并为一个 table (subject_lecturer_allinone) 并使用一个 type 只有 可以是 0 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 解决方案,您应该编写一些函数或触发器来处理它。