呃模型 - >关系模型(数据库)

时间:2012-05-06 10:46:14

标签: relational-database entity-relationship

我有一个e-r模型,其中包含以下实体: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)

并且实体人类不是必需的。

P.S。对关系模型不熟悉。

2 个答案:

答案 0 :(得分:0)

两种型号都是“正确的”。但是插入和查询数据存在差异。

当您希望将数据标准化时,第一个是一个不错的选择(有关规范化的更多信息,请参阅http://en.wikipedia.org/wiki/Database_normalization)。但是,当您想查询所有医生或所有患者时,您必须加入两个表格 此外,当您插入新对象时,您必须插入两行(进入Human和Doctor / Patient) 当您使用OR-Mapper时,它会将您的数据转换为对象,您可以使用多态,因为您有一个共同的基础(人类)。

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

答案 1 :(得分: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);