Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 数据库表设计建议_Database_Database Design - Fatal编程技术网

Database 数据库表设计建议

Database 数据库表设计建议,database,database-design,Database,Database Design,我计划创建两个表,员工和学生。Employee表和Student表有一些公共字段,也有一些不同的字段。将这些相同的字段像Person一样放在一个公共表中,然后将它们关联起来,这是一个好主意吗 例如,Employee和Student都有FirstName和LastName字段。PersonType personTypeID(1,2) personTypeName(学生、员工) 人 拟人 PersonType(PersonType中的外键) 人名 人名 雇员 EmployeeID(来自Person表

我计划创建两个表,员工和学生。Employee表和Student表有一些公共字段,也有一些不同的字段。将这些相同的字段像Person一样放在一个公共表中,然后将它们关联起来,这是一个好主意吗

例如,Employee和Student都有FirstName和LastName字段。

PersonType personTypeID(1,2)

personTypeName(学生、员工)

人 拟人

PersonType(PersonType中的外键)

人名

人名

雇员 EmployeeID(来自Person表的ForeignKey,也是此表的primaryKey,因为所有员工都是Person,或者您可以为此表创建一个unqiue empID,并创建一个类似fkPersonID的列,该列在该表中也必须是唯一的)

雇员人数(来自部门的fk)

预算

等等

学生 与Employee表完全相同的方法


因为你没有提到一个可能是雇员的学生,反之亦然,我没有考虑过这种情况。假设学生也可能是雇员,只需在students表中创建一列,该列是employee表中的fkEmpID。但在这种情况下,如果在employee和student表中都创建fkPersonID,则必须保证这两列匹配。要在学生表中提供两个(fkPersonID,fkEmpID)并匹配它们(fkPersonID,fkEmpID),这称为多列外键。

关系思维不是面向对象思维。感谢您的回答。然而,我正在寻找一个解释或理由,解释为什么我所要求的设计结构是好是坏。我想知道为什么我应该/不应该这样做。是的,你应该这样做,将来如果你只需要stu和emp的姓名和姓氏属性,你只能从person表中提取数据,否则你将不得不合并两个查询。您要问的是规范化规则之一。