我想为以下方案创建数据模型。我有一张名为PERSON和HEALTH_STANDARDS的表格。如何建模此特定表关系
PERSON都有编号,姓名,地址,电子邮件 HEALTH_STANDARDS有体重,身高等,
在UI中,如果用户选择一个人,它必须显示标准的健康属性。接下来,用户将根据所选人员更改健康属性。其他人将拥有标准的健康属性。
我该如何建模。我是否需要再创建一个表PERSON_HEALTH_ATTRIBUTES并在此处进行映射。
我想为以下方案创建数据模型。我有一张名为PERSON和HEALTH_STANDARDS的表格。如何建模此特定表关系
PERSON都有编号,姓名,地址,电子邮件 HEALTH_STANDARDS有体重,身高等,
在UI中,如果用户选择一个人,它必须显示标准的健康属性。接下来,用户将根据所选人员更改健康属性。其他人将拥有标准的健康属性。
我该如何建模。我是否需要再创建一个表PERSON_HEALTH_ATTRIBUTES并在此处进行映射。
因为与PERSON及其HEALTH属性存在一对一的关系,所以应该将它们合并到一个表中。如果默认HEALTH_STANDARDS只有1个默认值,那么我只是将它作为PERSON表上的默认值来实现。
在我看来,这HEALTH_STANDARDS
为常数的人健康标准数据/默认值实际上并不对应实际人员,因此PERSON
和HEALTH_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);
为什么不把每个人的健康属性保存为人表中的列? –
听起来像PERSON可能有一个'health_standard_id'记录,它引用了HEALTH_STANDARDS'id'。 – neokio
你使用的是MySQL还是Postgresql? – jarlh