首页 > 解决方案 > 如何让两个表引用数据库中的同一个对象?

问题描述

请原谅可能提出的问题,让我解释一下。

我有一张桌子:医生,还有一张桌子:病人

医生和患者具有相同的主键“person_id”

患者也可以是医生,反之亦然,在这种情况下,他们将拥有相同的 person_id

这是允许的吗?我将在这些表之间使用什么样的关系?我会允许两者的主键自动递增吗?我将如何在 MySQL Workbench 中对此进行建模?

标签: mysqldatabasedatabase-design

解决方案


对我来说听起来像Doctor并且PatientPerson. 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 ...
, ...
) ...

这只是一种可能的方法。如果没有更多关于问题空间的背景信息,即我们试图解决的问题,我们无法做出明确的建议。


推荐阅读