答案 0 :(得分:1)
您的图表转换为以下表格:
Employee (Ssn PK, Fname, Minit, Lname, Birth_date, Address, Job_type)
Secretary (Ssn PK/FK, Job_type FK, Typing_speed)
Technician (Ssn PK/FK, Job_type FK, Tgrade)
Engineer (Ssn PK/FK, Job_type FK, Eng_type)
Job_type
的域名为(Secretary, Technician, Engineer)
,枚举类型适合MySQL。子类型表上的FK约束是复合的:Secretary (Ssn, Job_type) REFERENCES Employee (Ssn, Job_type)
,对于其他两个子类型也是如此。您需要创建合适的索引。
MySQL不支持检查约束,这对于强制执行每个子类型的Job_type
非常好。您可以创建一个触发器来执行相同的操作。有了这个,复合FK约束可以防止员工在任何时候拥有多个子类型 - Employee
表中的每个记录只能有一个Job_type
,并且只有匹配的子类型表Job_type
可以有匹配的记录。
如果您希望Employee
完全参与子类型关系(即每个员工必须有一个子类型),您也可以为此创建一个触发器。