我以
Subject
和Lecturer
之间的关系作为具体示例。这意味着存在一个 subject
, may 仅由 one lecturer
提供,以及 lecturer
, may 仅由 one subject
提供。如何让两个实体部分参与关系数据模型(逻辑数据模型)中的 1:1 关系?我需要多少张桌子以及如何建造它们?我被卡住了。
第一种方法:该方法基于数据建模:
条件 1 (c1):存在 a
subject
可以由 仅一个 lecturer
提供
条件 2 (c2):和 a
lecturer
可以提供 仅一个 subject
。
要申请c1:您有两个选择:
lecturer
的P.K作为F.K转移到subject
。也可以是NULL
。但如果一个subject
仅由一个lecturer
提供,则将lecturer
的P.K放入其中。此选项具有无效。subject_lecturer
(仅用于使用此条件),其中包含两列(subject_id
和lecturer_id
)。它们与原来的表完全不同(subject
和 lecturer
)。在这个新表中,您仅保存 可能仅由一个 lecturer
提供的主题。所以你应该将 subject_id
设置为唯一。因此您只能在该表中插入一个主题。要应用 c2:您有与 c1 类似的选项。
lecturer_subject
)。在这个新表中,您应该将 lecturer_id
设置为唯一。所以你只能在这个表中插入一位讲师。我们可以合并它们吗(
subject_lecturer
,lecturer_subject
):第二种方法:但是,有一个解决方案可以合并它们。
将它们合并到一个表 (
subject_lecturer_allinone
) 中,并使用 type
列,对于 c1 记录,仅 可以是 0
,对于 c2 记录,1
。
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 个唯一约束来处理即将到来的数据。
(lecturer_id , type) when the value of type is 1
(subject_id , type ) when the value of type is 0
这不是 ER 解决方案,您应该编写一些函数或触发器来处理它。