首页 > 解决方案 > 从类表继承中确定类型

问题描述

我正在尝试实现一个具有类似于下面的表结构的数据库,其中 2 个表是表的子类型。

一个动物有一个主键,而狗和猫有一个引用动物的animal_id的外键。

animal(animal_id, bornAt)
dog(animal_id, barkSound)
cat(animal_id, meowSound)

值得注意的是,dog 和 cat 是不相交的,因此它们不可能在 animal 中引用相同的 animal_id。

给定animal_id,有没有办法使用SQL代码来确定动物的类型?例如,如果有一只animal_id 为4 的狗(不知道animal_id 4 是狗的事实),我想从animal 和dog 表中通过连接检索数据。

标签: mysqlsqldatabase-designclass-table-inheritance

解决方案


我见过的一种强制不相交类型的方法是在动物表中定义一个动物类型列,并让你的外键引用它。

animal(animal_id, animal_type, bornAt)
dog(animal_id, animal_type, barkSound)
cat(animal_id, animal_type, meowSound)

假设 dog.animal_type 仅限于“dog”,而 cat.animal_type 仅限于“cat”。然后狗和猫引用动物的外键使用引用动物中复合唯一键的列

这样,您就可以强制执行不相交的类型,因为动物中的给定行必须具有“狗”或“猫”,但不能同时具有。此外,您将知道动物表中给定行的动物类型,而无需加入其他表以查看是否匹配。


推荐阅读