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