我想为下面的场景创建数据模型。我有一张名为PERSON和HEALTH_STANDARDS的表。
PERSON有身份证,姓名,地址,电子邮件 HEALTH_STANDARDS有重量,身高等,
在用户界面中,如果用户选择了一个人,则必须显示标准的健康属性。接下来,用户将根据所选人员更改健康属性。 其他人将具有标准的健康属性。
我该如何建模呢?我是否需要再创建一个表PERSON_HEALTH_ATTRIBUTES并在此处进行映射。
答案 0 :(得分:1)
在我看来,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 );
答案 1 :(得分:0)
因为与PERSON及其HEALTH属性存在一对一的关系,所以您应该将它们合并到一个表中。如果默认的HEALTH_STANDARDS只有1个默认值,我只是将其作为PERSON表上的默认值实现。
答案 2 :(得分:0)