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

时间:2018-01-22 00:32:41

标签: database relational-database entity-relationship one-to-one

我将SubjectLecturer之间的关系作为具体示例。这意味着只有一个 subject和一个lecturer只有可能强<{1}} 可能< / strong>仅提供一个 lecturer。如何在关系数据模型(逻辑数据模型)中以1:1关系部分参与两个实体?我需要多少桌子以及如何建造它们?我被卡住了。

1 个答案:

答案 0 :(得分:2)

被修改

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

条件1(c1): subject可由只提供 lecturer

提供

条件2(c2):以及 a lecturer,可能只提供 subject

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

  1. lecturer的P.K作为F.K转移到subject。它也可以是NULL。但是,如果subject仅由一个lecturer提供,则将lecturer的P.K放入其中。此选项包含 Nullification
  2. 要避免出现无效,请使用两列(subject_lecturersubject_id)创建另一个表lecturer_id(仅限于使用此条件)。它们是原始表格中的F.K(subjectlecturer)。在此新表格中,您只保存可能仅由一个lecturer 提供的主题。因此,您应该将subject_id设为UNIQUE。因此,您只能在此表中插入一个主题。
  3. 要应用c2:您有与c1类似的选项。

    1. 与c1中的选项1相同。
    2. 与c1中的选项2相同。但是你应该为此创建另一个表(lecturer_subject)。在这个新表中,您应该将lecturer_id设为UNIQUE。因此,您只能在此表中插入一位讲师。
    3. 我们可以合并它们(subject_lecturerlecturer_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解决方案,您应该编写一些函数或触发器来处理它。