如何建模此特定表关系

时间:2016-10-20 06:35:24

标签: sql database postgresql entity-relationship

我想为下面的场景创建数据模型。我有一张名为PERSON和HEALTH_STANDARDS的表。

PERSON有身份证,姓名,地址,电子邮件 HEALTH_STANDARDS有重量,身高等,

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

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

3 个答案:

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我认为您应该像图像中描述的那样设计表格结构。

一个人与健康标准有一对多的关系,因为人可以有很多健康标准,如身高,体重,颜色。所以我们应该创建一个表,其中包含我们创建的人健康标准数据 person_health_standard

health_standard是主数据

enter image description here