Третий манифест Кристофера Дейта и Хью Дарвена


Третий манифест Кристофера Дейта и Хью Дарвена: предпосылки и обзор - часть 12


CREATE TABLE PERSON ( SS# CHAR (9) , BIRTHDATE DATE , ADDRESS CHAR (50) ) ;

CREATE TABLE EMP AS SUBCLASS OF PERSON ( EMP# CHAR (5) , ENAME CHAR (20) , SAL NUMERIC , HOBBY SET OF ( ACTIVITY) , WORKS_FOR COMPANY ) METHOD RETIREMENT_BENEFITS ( ) : NUMERIC ;

Теперь EMP обладает тремя дополнительными столбцами, унаследованными от PERSON. Если бы у PERSON были методы, они были бы также унаследованы. Таблицы PERSON и EMP представляют пример того, что называется супертаблицой и подтаблицей соответственно.

Конечно, при наличии таких расширительных определений потребовались бы и манипуляционные расширения, например:

  • путевые выражения (например, EMP.WORKS_FOR.LOCATION.STATE), которые могут возвращать скаляры, строки или отношения, причем в двух последних случаях компонентами строк или отношений могут быть строки или отношения и т.д.
  • литералы строк и отношений, например, ( 'E001', 'Smith', $50000, ( ( 'Soccer', 11 ) , ( 'Bridge', 4) ) , ( 'IBM', ( 'San Jose' , 'CA' ) ) )
  • операции реляционного сравнения, например, SUBSET (строгое подмножество) и SUBSETED
  • операции для обхода иерархии классов
  • возможность вызова методов в разделах, например, SELECT и WHERE (в терминах SQL)
  • возможность доступа к индивидуальным компонентам значений столбца, если это строки или отношения.

Сколько места потребовалось для краткого обзора того, как идея "relvar = класс" воплощается на практике! И что же здесь неправильно?

Прежде всего это неправильно, поскольку relvar - это переменная, а класс - это тип. Равно как значение отношения не есть домен, так и relvar - не есть домен. Уже из этого видно, что идея проваливается. Но можно привести еще несколько соображений:

  • Из соотношения "relvar = класс" следует, что "строка = объект", а "столбец = (публичная) переменная экземпляра. Но истинный объектный класс обладает методами и в нем не допускаются публичные переменные экземпляра, а "объектный класс" relvar обладает публичными переменными экземпляра и только необязательно - методами.
  • Имеется важное логическое различие между определениями столбцов (например) "SAL NUMERIC" и "WORKS_FOR COMPANY".


    Начало  Назад  Вперед