假设我有一个实体CLIENT,它可以是PERSON或ORGANIZATION。根据它的类型,我必须选择属性(地址,组织名称,date_of_birth,first_name,last_name for person)。我创建了所有三个实体,但是如何使属性依赖于类型?
见Database design: objects with different attributes,没有帮助......
答案 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
表中包含所有列。您可以拥有person
或organization
类型的列。与行类型无关的列可以为null。这样你的查询就会简单得多。
答案 1 :(得分:2)
要么使用3个表,要么使用1个表,并将不需要的列保留为null。哪种设计优越取决于用例。仅使用1个表可以提供更简单的查询,但需要更改每个新子类的表。使用多个表可以轻松添加更多类型,但可以提供更复杂的查询。有疑问,我会从一张桌子开始,但你的里程可能会有所不同。