Базы данных Oracle - статьи

         

Типы в поликлинике


Предположим, имеется поликлиника, в здании которой могут находиться сотрудники и посетители. У тех и других есть для учета имена, но у сотрудников к тому же табельные номера, а у посетителей - номер регистрационной карты. Классическую ситуацию "типы-подтипы" можно в Oracle разрешить объектными средствами, например так:

CREATE TYPE person_typ AS OBJECT ( name VARCHAR2(30) ) NOT FINAL /

CREATE TYPE employee_typ UNDER person_typ ( empid NUMBER ) NOT FINAL /

CREATE TYPE visitor_typ UNDER person_typ ( regid NUMBER ) NOT FINAL /

Если бы фраза NOT FINAL в определении PERSON_TYP отсутствовала, не удалось бы создать подтипы EMPLOYEE_TYP и VISITOR_TYP. У подтипов же эта фраза оставлена на всякий случай, который сейчас представится. Например, пусть нужно среди сотрудников отличать врачей от обслуживающего персонала:

CREATE TYPE doctor_typ UNDER employee_typ ( speciality VARCHAR2(30) , phone VARCHAR2(7) ) /

CREATE TYPE stuff_typ UNDER employee_typ ( job VARCHAR2(30) ) /

Данные о взаимозависимостях типов можно посмотреть в USER_TYPES:

SELECT supertype_name, type_name FROM user_types ORDER BY 1, 2;



Содержание раздела