И посетители, и сотрудники проходят через проходную, где отмечаются в таблице CHECKPOINT:
CREATE TYPE checkpoint_typ AS OBJECT ( entrytime DATE , person person_typ ) /
CREATE TABLE checkpoint OF checkpoint_typ;
Вот как они могут "проходить":
INSERT INTO checkpoint VALUES ( SYSDATE , employee_typ ( 'Scott', 1111 ) );
INSERT INTO checkpoint VALUES ( SYSDATE , visitor_typ ( 'Adams', 333 ) );
INSERT INTO checkpoint VALUES ( SYSDATE , doctor_typ ( 'Smith', 2222, 'Therapeutist', '7778899' ) );
INSERT INTO checkpoint VALUES ( SYSDATE , stuff_typ ( 'Alice', 4444, 'Office-cleaner' ) );
Можно проверить, кто прошел:
SELECT * FROM checkpoint;
Обратите внимание на использованное упрощение: никто не запретил пройти через проходную просто сотруднику (Scott), то есть не врачу и не обслуживающему персоналу. Желание запретить такого рода вставки в таблицу во многих случаях возникает вполне законно. Для запрета следовало было описать тип EMPLOYEE_TYP (а заодно и PERSON_TYP) как "абстрактный" (это термин объектно-ориентированного подхода):
CREATE TYPE employee_typ UNDER person_typ ( empid NUMBER ) NOT FINAL NOT INSTANTIABLE /