数据库设计 - 两个外键,但一个始终为空,另一个始终不为空

Database design - two foreign keys but one is always null and the other is always not null

我有三个 table: propertypersoncompany。一个属性只能属于一个人或一个公司。一个人或一家公司可以拥有多个属性。 我当前的数据库设计是在 property table 中包含两个外键 - person_idcompany_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
);

创建额外的 table CHECK 约束:

CREATE TABLE property(
   property_id int NOT NULL PRIMARY KEY,
   name varchar(255),
   person_id REFERENCES person,
   company_id REFERENCES company,
   CHECK (person_id IS NULL + company_id IS NULL = 1)
);

这将禁止错误的值(均为 NULL 或均为 NOT NULL)。

PS。两个引用的存在本身是合法和安全的。