mysql - 从类表继承中确定类型
问题描述
我正在尝试实现一个具有类似于下面的表结构的数据库,其中 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 表中通过连接检索数据。
解决方案
我见过的一种强制不相交类型的方法是在动物表中定义一个动物类型列,并让你的外键引用它。
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”。然后狗和猫引用动物的外键使用引用动物中复合唯一键的列对。
这样,您就可以强制执行不相交的类型,因为动物中的给定行必须具有“狗”或“猫”,但不能同时具有。此外,您将知道动物表中给定行的动物类型,而无需加入其他表以查看是否匹配。
推荐阅读
- python - 如果满足条件,则替换 3D 数组中的 2D 子数组
- javascript - 我的threejs材料有一些颜色问题
- php - 我们可以在准备语句的查询中进行查询吗?
- android - Android Studio 3.1.2,无法解决依赖问题
- selenium - 如何使用远程 Web 驱动程序设置/配置具有所需功能的 winium 和 webdriver?
- python - python在深层节点xml中查找标签
- json - 如何为整数数组编写正则表达式?
- google-analytics - 在 Google 分析中意外混合了 2 个属性的数据。我可以将它们向后分开吗?
- cmd - cmd 属性和默认设置不同步
- python - 自定义排序函数 Python