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

问题描述 投票:0回答:2

我以

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

database relational-database entity-relationship one-to-one
2个回答
2
投票

已编辑

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

条件 1 (c1):存在 a

subject
可以由 仅一个
lecturer

提供

条件 2 (c2):和 a

lecturer
可以提供 仅一个
subject

要申请c1:您有两个选择:

  1. lecturer
    的P.K作为F.K转移到
    subject
    。也可以是
    NULL
    。但如果一个
    subject
    仅由一个
    lecturer
    提供,则将
    lecturer
    的P.K放入其中。此选项具有无效
  2. 为了避免无效,请制作另一个表
    subject_lecturer
    (仅用于使用此条件),其中包含两列(
    subject_id
    lecturer_id
    )。它们与原来的表完全不同(
    subject
    lecturer
    )。在这个新表中,您仅保存 可能仅由一个
    lecturer
    提供的主题。所以你应该将
    subject_id
    设置为唯一。因此您只能在该表中插入一个主题。

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

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

我们可以合并它们吗(

subject_lecturer
lecturer_subject
):

根据数据建模概念 (ER),c1 和 c2 中有不同类型的数据。

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

将它们合并到一个表 (

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 解决方案,您应该编写一些函数或触发器来处理它。


0
投票
  1. 讲师(讲师_id,讲师_姓名)
  2. 主题(主题_id,主题_名称)
  3. 新(讲师_id,主题_id)
© www.soinside.com 2019 - 2024. All rights reserved.