Sql 如何为这个特定的表关系建模

Sql 如何为这个特定的表关系建模,sql,database,postgresql,entity-relationship,Sql,Database,Postgresql,Entity Relationship,我想为下面的场景创建数据模型。我有一张名为“人与健康标准”的桌子 此人有身份证、姓名、地址、电子邮件 健康标准包括体重、身高等 在UI中,如果用户选择一个人,则必须显示标准的健康属性。接下来,用户将根据所选人员更改健康属性。 其余人员将具有标准健康属性 我该如何建模呢。我是否需要再创建一个表PERSON\u HEALTH\u ATTRIBUTES并在此处进行映射。因为PERSON及其健康属性之间存在一对一的关系,所以您应该将它们合并到一个表中。如果默认的健康标准只有一个默认值,我将在PERSON

我想为下面的场景创建数据模型。我有一张名为“人与健康标准”的桌子

此人有身份证、姓名、地址、电子邮件 健康标准包括体重、身高等

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


我该如何建模呢。我是否需要再创建一个表PERSON\u HEALTH\u ATTRIBUTES并在此处进行映射。

因为PERSON及其健康属性之间存在一对一的关系,所以您应该将它们合并到一个表中。如果默认的健康标准只有一个默认值,我将在PERSON表上实现它作为默认值。

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

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

健康标准是一个主数据


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

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 );

为什么不把每个人的健康属性保存为person表中的列呢?是的,听起来person可能有一个
health\u standard\u id
记录,它引用了health\u STANDARDS
id
。你使用的是MySQL还是Postgresql?@jarlh..我使用的是Postgres。就我个人而言,我会使用单独的表来计算
person\u WEIGHT
人标准体重
人身高
人标准身高