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是狗这一事实),我想通过动物和狗表中的连接检索数据。
我见过的强制不相交类型的一种方法是在动物表中定义动物类型列,并使外键引用它。
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”。然后,来自引用动物的狗和猫的外键使用引用动物中复合唯一键的一对列。
这样您就可以强制执行不相交的类型,因为动物中的给定行必须具有“狗”或“猫”,但不能同时具有两者。此外,您还可以知道动物表中给定行的动物类型,而无需加入其他表来查看是否有匹配项。
| 归档时间: |
|
| 查看次数: |
535 次 |
| 最近记录: |