【发布时间】:2021-02-24 02:34:56
【问题描述】:
我有三个表: property、person 和 company。一个财产只能属于个人或公司。一个人或一个公司可以拥有多个财产。
我当前的数据库设计是在property 表中包含两个外键-person_id 和company_id,其中一个始终为空,另一个不为空。我只是想知道在这种情况下是否有更好的方法来设计数据库?
CREATE TABLE person(
person_id int NOT NULL PRIMARY KEY,
name varchar(255)
);
CREATE TABLE company(
company_id int NOT NULL PRIMARY KEY,
name varchar(255)
);
CREATE TABLE property(
property_id int NOT NULL PRIMARY KEY,
name varchar(255),
person_id REFERENCES person,
company_id REFERENCES company
);
【问题讨论】:
-
我很想说所有财产都归组织所有。其中一些组织可能是个人。
-
@Strawberry 这可能不是一个好的设计。如果你这样做,你会假设公司和个人具有相同的属性,但在实际场景中他们没有。您的设计适合的另一种情况可能是:例如,如果这两个表是学生和教师,您可以简单地创建一个人员表并添加一个 person_type 属性来指定一个人是学生还是教师。
-
你使用的是 MySQL 还是 Postgresql?
-
没有。不完全是这样。在这种情况下,用户是组织的成员。
标签: mysql sql database postgresql database-design