SQL属性取决于类型

时间:2013-03-30 17:13:22

标签: sql attributes

假设我有一个实体CLIENT,它可以是PERSON或ORGANIZATION。根据它的类型,我必须选择属性(地址,组织名称,date_of_birth,first_name,last_name for person)。我创建了所有三个实体,但是如何使属性依赖于类型?

Database design: objects with different attributes,没有帮助......

2 个答案:

答案 0 :(得分:3)

一个典型的选择是1:1扩展表:

create table client (id int primary key);
create table person (id int foreign key references client(id), ...columns...);
create table organization (id int foreign key references client(id), ...columns...);

但是,我首选的选择是在client表中包含所有列。您可以拥有personorganization类型的列。与行类型无关的列可以为null。这样你的查询就会简单得多。

答案 1 :(得分:2)

要么使用3个表,要么使用1个表,并将不需要的列保留为null。哪种设计优越取决于用例。仅使用1个表可以提供更简单的查询,但需要更改每个新子类的表。使用多个表可以轻松添加更多类型,但可以提供更复杂的查询。有疑问,我会从一张桌子开始,但你的里程可能会有所不同。