Таблица DERIVEDCLASS может иметь PK с автоматическим приращением (идентификатор), но в этом случае должен быть другой столбец, который является ссылкой внешнего ключа обратно на BASETABLE:
BASETABLE
id int pk autoincrement
baseattribute1
baseattribute2
etc etc
DERIVEDTABLE
id int pk autoincrement
**baseid** foreign key references BASETABLE(id)
extendedattribute1
extendedattribute2
Это позволило бы несколько производных каждого базового объекта. Поместив уникальный индекс в DERIVEDTABLE.baseid или сделав baseid, PK предотвратит это, если это будет желательно.
Следующее будет создавать экземпляры членов базового класса и их производных экземпляров и / или расширенных свойств, если таковые имеются [что будет зависеть от того, имеет ли baseid уникальное ограничение в DerivedTable; если последнее, то это может быть PK в отношениях один-к-одному с BaseTable, а не многие-к-одному]:
select * from BASETABLE
LEFT JOIN DERIVEDTABLE
on BASETABLE.id = DERIVEDTABLE.baseid
Экземпляры базового класса, которые не были расширены, будут иметь значение NULL в столбцах расширенных атрибутов.
Чтобы найти только те сущности, которые были расширены, используйте внутреннее соединение:
select * from DERIVEDTABLE
inner join BASETABLE
on DERIVEDTABLE.baseid = BASETABLE.id