0

我有一个具有以下实体的 er 模型:和Doctor, Patient, Human之间存在代关系。我正在尝试创建一个关系模型。那么,哪个模型是正确的:第一个还是第二个?Doctor -> HumanPatient -> Human

1)

Human (Name, Surname, Sex, Address)
Doctor(License number, specification)
Patient(Insurance number, diagnosis)

2)

Doctor(Name, Surname, Sex, Address, License number, specification)
Patient(Name, Surname, Sex, Address, Insurance number, diagnosis)

并且实体 Human 不是必需的。

PS A 是关系模型的新手。

4

2 回答 2

0

这在很大程度上取决于您的要求。医生也可以是病人吗?如果是,您需要一个基表,例如human. 在这种情况下doctorpatient应该有一个外键human

如果您的 DBMS 支持,另一种选择是使用表继承。在 PostgreSQL 中,您可以执行以下操作:

create table human 
(
   name text,
   surname text,
   sex char(1),
   address text
);

create table doctor 
(
   license_number integer,
   specifiction text
)
inherits (human);

create table patient
(
   insurance_number integer,
   diagnosis text
)
inherits (human);
于 2012-05-06T11:01:08.087 回答
0

两种模型都是“正确的”。但是插入和查询数据是有区别的。

当您想要保持数据规范化时,第一个是一个不错的选择(有关规范化的更多信息,请参见http://en.wikipedia.org/wiki/Database_normalization)。但是,例如,当您要查询所有医生或所有患者时,您必须连接两个表。
此外,当您插入一个新对象时,您必须插入两行(人类和医生/患者)。
当您使用 OR-Mapper,它将您的数据转换为对象时,您可以使用多态性,因为您有一个共同的基础(人类)。

当速度很重要时,第二种可能性是一个不错的选择。
当您想要查询所有医生/患者时,它会更快,因为不需要连接。
但是当您要查询例如医生和患者的所有地址时,它会变慢

于 2012-05-06T10:55:35.507 回答