PERSON または ORGANIZATION のエンティティ CLIENT があるとします。どのタイプであるかに応じて、属性 (住所、組織の名前、個人の生年月日、名、姓) を選択する必要があります。3 つのエンティティをすべて作成しましたが、属性をタイプ依存にするにはどうすればよいですか?
Database design: objects with different attributes を見ましたが、役に立ちませんでした...
PERSON または ORGANIZATION のエンティティ CLIENT があるとします。どのタイプであるかに応じて、属性 (住所、組織の名前、個人の生年月日、名、姓) を選択する必要があります。3 つのエンティティをすべて作成しましたが、属性をタイプ依存にするにはどうすればよいですか?
Database design: objects with different attributes を見ましたが、役に立ちませんでした...
典型的な選択肢の 1 つは、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 になる可能性があります。そうすれば、クエリははるかに簡単になります。
Either you use 3 tables or you use 1 table and leave the not needed columns null. Which design is superior depends on the use case. Using only 1 table gives simpler queries but requires to change the table for each new subclass. Using multiple tables allows to add more types easily but gives more complicated queries. In doubt I would start with only 1 table but your mileage may vary.