mysql - 如何让两个表引用数据库中的同一个对象?
问题描述
请原谅可能提出的问题,让我解释一下。
我有一张桌子:医生,还有一张桌子:病人
医生和患者具有相同的主键“person_id”
患者也可以是医生,反之亦然,在这种情况下,他们将拥有相同的 person_id
这是允许的吗?我将在这些表之间使用什么样的关系?我会允许两者的主键自动递增吗?我将如何在 MySQL Workbench 中对此进行建模?
解决方案
对我来说听起来像Doctor
并且Patient
是Person
. Doctor
如果和的实例之间的关系Patient
很重要,我会person_id
在这些表中创建一个对新超类表的 foreign_key 引用person
:
例如
CREATE TABLE `person`
( id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT 'PK person.id'
, ...
) ...
CREATE TABLE `doctor`
( person_id BIGINT PRIMARY KEY COMMENT 'PK, FK ref person.id'
, ...
, CONSTRAINT FK_doctor_person FOREIGN KEY person_id REFERENCE person (id)
ON UPDATE CASCADE ...
, ...
) ...
CREATE TABLE `patient`
( person_id BIGINT PRIMARY KEY COMMENT 'PK, FK ref person.id'
, ...
, CONSTRAINT FK_patient_person FOREIGN KEY person_id REFERENCE person (id)
ON UPDATE CASCADE ...
, ...
) ...
这只是一种可能的方法。如果没有更多关于问题空间的背景信息,即我们试图解决的问题,我们无法做出明确的建议。
推荐阅读
- f# - F# 字符串连接挂起异步计算
- javascript - 隐藏带星号的文本
- r - 如何避免在 R 中以科学计数法显示值?
- assembly - x86-64 做地址计算 mov ie mov i(r, r, i), r 在端口 1 上执行吗?还是还是p0156?
- apache-spark - 连接结构数组的方法
- javascript - 如何动态更新正在运行的 NodeJS 代码
- r - 如何在交付/接收较早的订单之前知道下一个订单的客户?在 R 中
- reinforcement-learning - 下一个状态与同一集的 prev_state 相同时的深度强化学习行为
- scala - 使用 ScalaTest 时出现 java.lang.NoSuchFieldError
- python - 为什么我的敌人子弹碰到我的玩家时没有删除