Классика баз данных - статьи

       

Но не все десерты являются


Но не все десерты являются пирожными, и не всякая еда является десертом (отложим сейчас очевидные культурные сложности, например, что-нибудь, что не считается десертом в Соединенных Штатах, может являться таковым, скажем, в Эквадоре). Любые характеристики еды приложимы к пирожному, но не все характеристики пирожного обязательно имеют смысл для еды, к примеру, такой как огурец.

После того как иерархия объявлена, мы можем работать с ней и выполнять изменения типов в этой иерархии. В некоторых случаях, возможно, потребуется выбирать и просматривать все типы по всей иерархии. В других случаях - только обновлять определенный уровень иерархии, такой как пирожные. И, наконец, бывают ситуации, когда необходимо работать с, скажем, всеми десертами, которые не являются пирожными. И это приводит нас прямо к концепции подставляемости (substitutability)

Супертип является подставляемым, если один из его подтипов может заменить его в некоторых ситуациях, например, при присваивании столбцу или программной переменной, объявленной как супертип (а не как этот конкретный подтип).

Допустим, я создаю таблицу объектов типа food_t:

CREATE TABLE sustenance OF food_t;

Я могу теперь вставить строки в эту таблицу следующим образом:

BEGIN INSERT INTO sustenance VALUES (food_t ( 'Brussel Sprouts', 'VEGETABLE', 'farm' ) ); INSERT INTO sustenance VALUES (dessert_t ( 'Jello', 'PROTEIN', 'bowl', 'N', 1887 ) ); INSERT INTO sustenance VALUES (cake_t ( 'Marzepan Delight', 'CARBOHYDRATE', 'bakery', 'N', 1634, 8, 'Happy Birthday!' ) ); END; /

После запуска этого кода в моей таблице будет три строки: объект еда, объект десерт и объект пирожное. В этом блоке кода, я подставляю мои подтипы вместо супертипа в двух вставках. Это не вызывает ошибки, поскольку пирожные и десерты являются типами еды.

Я могу выполнить запрос к этой таблице в SQL*Plus и он покажет мне все атрибуты типа еда (и только) для трех строк.

SQL> SELECT * FROM sustenance; NAME FOOD_GROUP GROWN_IN ------------------------- ------------------ ------------- Brussel Sprouts VEGETABLE farm Jello PROTEIN bowl Marzepan Delight CARBOHYDRATE bakery


Содержание  Назад  Вперед