实体关系图。 IS A关系如何转化为表格?

问题描述 投票:13回答:3

我只是想知道,ER图中的ISA关系如何转换为数据库中的表。

会有3张桌子吗?一个人,一个学生,一个老师?

或者会有2张桌子吗?一个用于学生,一个用于教师,每个实体具有人+属性的属性?

或者是否会有一个包含所有4个属性的表,并且表中的一些正方形为空,具体取决于它是否是该行中的学生或教师?

注意:我忘记添加此内容,但ISA关系完全覆盖,因此一个人必须是学生或教师。

entity-relationship diagram database isa
3个回答
12
投票

假设这种关系是强制性的(如你所说,一个人必须是学生或教师)和脱节(一个人是学生或教师,但不是两者),最好的解决方案是2个表,一个用于学生一个给老师。

如果参与是可选的(这不是你的情况,但让我们说它是完整的),那么3表选项是要走的路,有一个Person(PersonID,Name)表,然后是另外两个将引用的表Person表,例如学生(PersonID,GPA),PersonID为PK,FK引用Person(PersonID)。

1表选项可能不是这里最好的方法,它会产生几个空值的记录(如果一个人是学生,只有教师的属性将为null,反之亦然)。

如果不相交,那么这是一个不同的故事。


3
投票

您可以使用4个选项将其映射到ER,

选项1

  • 人(SIN,名称)
  • 学生(SIN,GPA)
  • 教师(SIN,薪酬)

选项2由于这是一种覆盖关系,因此选项2不是很好的匹配。

  • 学生(SIN,名称,GPA)
  • 教师(SIN,姓名,工资)

选项3

  • 人(SIN,姓名,GPA,薪水,Person_Type)人类型可以是学生/教师

选项4

  • 人(SIN,姓名,GPA,薪水,学生,老师)学生和老师都是bool类型字段,可以是是或否,是重叠的好选择

由于子类没有太多属性,因此选项3和选项4最好将其映射到ER


0
投票

这完全取决于关系的性质。

如果Person和Student之间的关系是1到N(一对多),那么正确的方法是创建一个外键关系,其中Student有一个外键返回到Person的ID主键列。人与教师的关系也是如此。

但是,如果关系是M到N(多对多),那么您可能希望创建一个包含这些关系的单独表。

假设您的ERD使用1到N的关系,您的表结构应该如下所示:

CREATE TABLE Person(sin bigint,name text,PRIMARY KEY(sin));

CREATE TABLE Student(GPA float,fk_sin bigint,FOREIGN KEY(fk_sin)REFERENCES Person(sin));

并按照教师表的相同示例。这种方法大多数时候都会让你进入第三范式。

© www.soinside.com 2019 - 2024. All rights reserved.