[重要な編集: 継承に関するヒントを提供してくれた Branko に感謝]
ビジネス ( business_id )
OFFICE ( office_id , business_id, office_name) office_id は PK のシーケンスです。business_id と office_name は複合一意キー (ビジネス キー) です。business_id は BUSINESS の必須の FK です。
CUBICAL ( cubical_ID、office_id、cubical_#)cubical_ID は PK のシーケンスです。office_id とcubical_# は複合一意キー (ビジネス キー) です。office_id は、OFFICE に対する必須の FK です。
エンティティ BUSINESS には多くのオフィスがあります。各オフィスは、1 つのビジネスに属している必要があります。オフィスには多くの CUBICAL があります。各 CUBICAL は 1 つの OFFICE に属していなければなりません。
4 番目のエンティティである TASK ( task_id , task_descr) は、立方体に割り当てることができますが、TASK を適用することを除いてビジネスの目的を果たさないオフィス内のエリア (廊下、電気室、またはオフィス全体など) にも割り当てることができます。 .
継承では、スーパータイプ TASKABLE でこれを行う方法が 2 つあります。「cubical」または「noncubical」のサブタイプ識別子を使用して、CUBICAL と NON CUBICAL の 2 つのサブタイプを作成します。または、「cubical」、「hallway」、「electric room」、「property wide」などのサブタイプ識別子を使用して、1 つのサブタイプ CUBICAL を作成します。
TASKABLE ( taskable_id , taskable_type ) where taskable_type in ('立方体', '非立方体')
CUBICAL ( cubical_ID、office_id、cubical_#、taskable_id)
NONCUBICAL ( noncubical_ID , office_id, descr, taskable_id) where description in ('hallway', 'electric room', 'office wide', 'etc')
TASK ( task_id , task_descr, taskable_id)
select cubical_#, task_descr from cubical, task where cubical.taskable_id = taskable.taskable_id
union
select non_cubical.descr, task_descr from noncubical, task where noncubical.taskable_id = taskable.taskable_id
TASKABLE ( taskable_id , taskable_type ) where *taskable_type in ('cubical', 'hallway', 'electric room', 'office wide', 'etc')*
CUBICAL ( cubical_ID、office_id、cubical_#、taskable_id) where taskable_id
TASK ( task_id , taskable_id)
select cubical_#, task_descr from cubical, task where cubical.taskable_id = task.taskable_id
union
select taskable.taskable_type, task.task_descr from taskable, task_descr where taskable.taskable_id = task.task_id
and taskable.taskable_type NOT LIKE 'cubical'
この状況では、非立方体領域にはタスクを割り当てる以外に用途がなく、他の属性がないため、1 つのサブタイプを使用して、SQL ステートメントの where 句で追加の条件を使用するのが最善であると考えています (NOT LIKE 'cubical ')
5 つ以上のサブタイプ ディスクリミネータがあるのに、単一のサブタイプ エンティティしか使用しないのは奇妙ですか?
ありがとう、 -- マシュー・モイセン