如何让两个实体部分参与 1:1 关系
How can I get partial participation of both entities in 1:1 relationship
我以 Subject
和 Lecturer
之间的关系作为具体示例。这意味着 subject
可能 仅由 one lecturer
和 lecturer
提供可能只提供一个subject
。如何让两个实体部分参与关系数据模型(逻辑数据模型)中的 1:1 关系?我需要多少张桌子以及如何构建它们?我卡住了。
已编辑
第一种方法:此方法基于数据建模:
条件一(c1):有一个subject
可能由只有一个[=13=提供]
条件 2 (c2): 并且 a lecturer
可以提供 只有一个 subject
.
要应用 c1:您有两个选择:
- 将
lecturer
的 P.K 作为 F.K 转移到 subject
。也可以是 NULL
。但是如果一个subject
只有一个lecturer
提供,就把lecturer
的P.K放在里面。此选项有 Nullification.
- 为了避免无效化,制作另一个 table
subject_lecturer
(仅用于使用此条件)两列(subject_id
和 lecturer_id
)。它们是原始 table 的 F.K(subject
和 lecturer
)。在这个新的 table 中,您只保存 一个只能由一个 lecturer
提供的主题。所以你应该让 subject_id
成为唯一的。所以你只能在这个 table. 中插入一个主题
要应用 c2:您有与 c1 类似的选项。
- 与 c1 中的选项 1 相同。
- 与c1中的选项2相同。但是你应该为此制作另一个 table (
lecturer_subject
)。在这个新的 table 中,您应该将 lecturer_id
设置为 UNIQUE。所以你只能在这个 table. 中插入一位讲师
我们可以合并它们吗(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 解决方案,您应该编写一些函数或触发器来处理它。
我以 Subject
和 Lecturer
之间的关系作为具体示例。这意味着 subject
可能 仅由 one lecturer
和 lecturer
提供可能只提供一个subject
。如何让两个实体部分参与关系数据模型(逻辑数据模型)中的 1:1 关系?我需要多少张桌子以及如何构建它们?我卡住了。
已编辑
第一种方法:此方法基于数据建模:
条件一(c1):有一个subject
可能由只有一个[=13=提供]
条件 2 (c2): 并且 a lecturer
可以提供 只有一个 subject
.
要应用 c1:您有两个选择:
- 将
lecturer
的 P.K 作为 F.K 转移到subject
。也可以是NULL
。但是如果一个subject
只有一个lecturer
提供,就把lecturer
的P.K放在里面。此选项有 Nullification. - 为了避免无效化,制作另一个 table
subject_lecturer
(仅用于使用此条件)两列(subject_id
和lecturer_id
)。它们是原始 table 的 F.K(subject
和lecturer
)。在这个新的 table 中,您只保存 一个只能由一个lecturer
提供的主题。所以你应该让subject_id
成为唯一的。所以你只能在这个 table. 中插入一个主题
要应用 c2:您有与 c1 类似的选项。
- 与 c1 中的选项 1 相同。
- 与c1中的选项2相同。但是你应该为此制作另一个 table (
lecturer_subject
)。在这个新的 table 中,您应该将lecturer_id
设置为 UNIQUE。所以你只能在这个 table. 中插入一位讲师
我们可以合并它们吗(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 解决方案,您应该编写一些函数或触发器来处理它。