2016-10-20 29 views
2

我想为以下方案创建数据模型。我有一张名为PERSON和HEALTH_STANDARDS的表格。如何建模此特定表关系

PERSON都有编号,姓名,地址,电子邮件 HEALTH_STANDARDS有体重,身高等,

在UI中,如果用户选择一个人,它必须显示标准的健康属性。接下来,用户将根据所选人员更改健康属性。其他人将拥有标准的健康属性。

我该如何建模。我是否需要再创建一个表PERSON_HEALTH_ATTRIBUTES并在此处进行映射。

+0

为什么不把每个人的健康属性保存为人表中的列? –

+1

听起来像PERSON可能有一个'health_standard_id'记录,它引用了HEALTH_STANDARDS'id'。 – neokio

+0

你使用的是MySQL还是Postgresql? – jarlh

回答

0

因为与PERSON及其HEALTH属性存在一对一的关系,所以应该将它们合并到一个表中。如果默认HEALTH_STANDARDS只有1个默认值,那么我只是将它作为PERSON表上的默认值来实现。

0

我认为你应该设计一个图像描述的波纹管表结构。

其中一个人与健康标准有一对多关系,因为人可以有许多健康标准,如身高,体重,肤色。所以,我们应该创建一个更表,将在这里包含我们已经创建person_health_standard

health_standard是主数据

enter image description here

1

在我看来,这HEALTH_STANDARDS为常数的人健康标准数据/默认值实际上并不对应实际人员,因此PERSONHEALTH_STANDARDS之间没有直接关系。相反,当给定的人在PERSON_HEALTH_ATTRIBUTES中没有行时,它可以被暗示,即它默认为标准值,例如,限制属性只是简单的权重:

CREATE TABLE HEALTH_STANDARDS 
(person_weight_kg INTEGER NOT NULL); 

CREATE TABLE PERSON 
(person_id INTEGER NOT NULL UNIQUE, 
    name VARCHAR(35) NOT NULL); 

CREATE TABLE PERSON_HEALTH_ATTRIBUTES 
(person_id INTEGER NOT NULL UNIQUE 
    REFERENCES PERSON (person_id), 
    person_weight_kg INTEGER NOT NULL); 


SELECT person_id, person_weight_kg 
    FROM PERSON_HEALTH_ATTRIBUTES 
UNION 
SELECT person_id, person_weight_kg 
    FROM PERSON 
     NATURAL JOIN HEALTH_STANDARDS 
WHERE person_id NOT IN (SELECT person_id 
          FROM PERSON_HEALTH_ATTRIBUTES);