database - 数据库表设计建议

标签 database database-design

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

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

最佳答案

人物类型

人员类型 ID (1 ,2 )

personTypeName (student,employee)

个人ID

PersonType(来自 PersonType 的外键)

人名

人物姓氏

员工

EmployeeID(来自 Person 表的外键以及该表的主键,因为所有员工都是个人,或者您可以为该表创建一个唯一的 empID,并创建一个像 fkPersonID 这样的列,该列在该表中也必须是唯一的)

EmployeeDepID(来自部门)

预算

等等

学生

与 Employee 表完全相同的方法。

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

关于database - 数据库表设计建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36112433/

相关文章:

database-design - 多对多相交表的正确表命名约定

ruby-on-rails - 在Ruby on Rails 3中动态(动态)创建表和模型

mysql - 如何设计存储表快照的关系型数据库?

database - 如果我们每毫秒生成一个数字,那么一天会有多少数据?

database - H2 内存数据库,[JdbcSQLException : Table "USERINFO" not found; SQL statement:

mysql - 哪种数据库设计适合复杂的测验应用程序?

php - 从 MySQL 数据库中选择一个值,如果发布的值相等,则执行 'action'

database - 引用表的定义

php - 在 Kohana 3 中,您如何找出查询期间出现的错误?

asp.net-mvc - asp.net core 2 中的种子数据库用户和角色表