我只是想知道,ER图中的ISA关系如何转换为数据库中的表。
会有3张桌子吗?一个人,一个学生,一个老师?
或者会有2张桌子吗?一个用于学生,一个用于教师,每个实体具有人+属性的属性?
或者是否会有一个包含所有4个属性的表,并且表中的一些正方形为空,具体取决于它是否是该行中的学生或教师?
注意:我忘记添加此内容,但ISA关系完全覆盖,因此一个人必须是学生或教师。
假设这种关系是强制性的(如你所说,一个人必须是学生或教师)和脱节(一个人是学生或教师,但不是两者),最好的解决方案是2个表,一个用于学生一个给老师。
如果参与是可选的(这不是你的情况,但让我们说它是完整的),那么3表选项是要走的路,有一个Person(PersonID,Name)表,然后是另外两个将引用的表Person表,例如学生(PersonID,GPA),PersonID为PK,FK引用Person(PersonID)。
1表选项可能不是这里最好的方法,它会产生几个空值的记录(如果一个人是学生,只有教师的属性将为null,反之亦然)。
如果不相交,那么这是一个不同的故事。
您可以使用4个选项将其映射到ER,
选项1
选项2由于这是一种覆盖关系,因此选项2不是很好的匹配。
选项3
选项4
由于子类没有太多属性,因此选项3和选项4最好将其映射到ER
这完全取决于关系的性质。
如果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));
并按照教师表的相同示例。这种方法大多数时候都会让你进入第三范式。