从类表继承确定类型

zyc*_*hin 4 mysql sql database-design class-table-inheritance

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

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

animal(animal_id, bornAt)
dog(animal_id, barkSound)
cat(animal_id, meowSound)
Run Code Online (Sandbox Code Playgroud)

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

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

Bil*_*win 5

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

animal(animal_id, animal_type, bornAt)
dog(animal_id, animal_type, barkSound)
cat(animal_id, animal_type, meowSound)
Run Code Online (Sandbox Code Playgroud)

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

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