BUSINESS (business_id)
OFFICE (office_id, business_id, office_name) office_id is a sequence for the PK; business_id and office_name are a composite unique key (the business key); business_id is a mandatory FK to BUSINESS;
CUBICAL (cubical_ID, office_id, cubical_#) cubical_ID is sequence for the PK; office_id and cubical_# are a composite unique key (the business key); office_id is a mandatory FK to OFFICE.
Entity BUSINESS has many OFFICEs; each OFFICE must belong to one BUSINESS. An OFFICE has many CUBICALs; each CUBICAL must belong to one OFFICE.
A fourth entity, TASK (task_id, task_descr), can be assigned to cubicals but also to areas within the office that serve no purpose for the business aside from having TASKs applied to them, for example a hallway, electric room, or the whole office.
With inheritance, I see two ways of doing this with the supertype TASKABLE: either create two subtypes, CUBICAL and NON CUBICAL, with subtype discriminator 'cubical' or 'noncubical', or create one subtype, CUBICAL, with subtype discriminator one of 'cubical', 'hallway', 'electric room', 'property wide', etc.
TASKABLE (taskable_id, taskable_type) where taskable_type in ('cubical', 'non cubical')
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'
Because the noncubical areas have no other use than to be assigned tasks, and have no other attributes, it's best to go with one subtype and use the additional condition on the where clause (NOT LIKE 'cubical').
Is it odd to have 5+ subtype discriminators but only use a single subtype entity?