我将Subject
和Lecturer
之间的关系作为具体示例。这意味着只有一个 subject
和一个lecturer
只有可能>强<{1}} 可能< / strong>仅提供一个 lecturer
。如何在关系数据模型(逻辑数据模型)中以1:1关系部分参与两个实体?我需要多少桌子以及如何建造它们?我被卡住了。
答案 0 :(得分:2)
第一种方法:此方法基于数据建模:
条件1(c1): subject
可由只提供 lecturer
条件2(c2):以及 a lecturer
,可能只提供 subject
。
要应用c1:您有两个选择:
lecturer
的P.K作为F.K转移到subject
。它也可以是NULL
。但是,如果subject
仅由一个lecturer
提供,则将lecturer
的P.K放入其中。此选项包含 Nullification 。subject_lecturer
和subject_id
)创建另一个表lecturer_id
(仅限于使用此条件)。它们是原始表格中的F.K(subject
和lecturer
)。在此新表格中,您只保存可能仅由一个lecturer
提供的主题。因此,您应该将subject_id
设为UNIQUE。因此,您只能在此表中插入一个主题。 要应用c2:您有与c1类似的选项。
lecturer_subject
)。在这个新表中,您应该将lecturer_id
设为UNIQUE。因此,您只能在此表中插入一位讲师。 我们可以合并它们(subject_lecturer
,lecturer_subject
):
基于数据建模概念(ER),您在c1和c2中拥有不同类型的数据。
第二种方法:但是,有一个合并它们的解决方案。
将它们合并到一个表格中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解决方案,您应该编写一些函数或触发器来处理它。