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

       

Операции определения данных


Начну с доменов. В Alpha упоминались только "простые" домены -- т.е. представляемые в терминах "простых" типов данных, таких как CHAR(5), NUM(4,0). Другими словами, домены не намного отличаются от того, что называется "DISTINCT types" в SQL3, а не являются полными абстрактными типами данных -- ADT -- во всей их красе. (С другой стороны, в статье ничего не говорится по поводу того, что они не могут быть полными ADT!) Вот пример определения (и разрушения) домена на языке Alpha:

DOMAIN CITY CHAR(15)

DROP CITY

Одним из достоинств статьи является то, что -- в отличие от некоторых предшествовавших статей -- в ней проводится явное различие между доменами и атрибутами. В действительности, используется соглашение, по которому имена атрибутов принимают конкретный вид

[role-name] domain-name

где необязательное имя роли является квалификатором, требуемым только в том случае, когда один домен используется в отношении более одного раза. "Одно из важных преимуществ [этой схемы состоит в том, что она допускает] систематическое управление преобразованиями всех вхождений… Примером… является совместное изменение всех номеров деталей независимо от того, где они встречаются…". Как кажется, здесь Кодд, по крайней мере, частично недооценивает ту роль, которую мог бы иметь каталог в процессе такой трансформации -- странное упущение при том, что позже в статье явно упоминается каталог. (Действительно, одним из многих первооткрытий, содержащихся в статье про Alpha, является суждение о том, что сам каталог следует структурировать тем же самым образом, что и другие данные: а именно, как отношения.) Другими словами, я не уверен, что соглашение об именовании атрибутов является хорошим; на самом деле, в нем не принимается во внимание вопрос об именах атрибутов порождаемых отношений.

Обращаясь теперь к отношениям -- более точно, к тому, что Кодд называет "изменяемыми во времени" отношениями -- заметим, что в большей части статьи применяется подразумеваемое предположение, согласно которому все такие отношения являются базовыми; таким вопросам, как определение представлений и в особенности обновление представлений, практически не уделяется внимание (хотя в более ранней статье [1] содержится краткое обсуждение феномена, связанного с представлениями и называемого "миграцией доменов", что я затрону в своей следующей заметке). В определении такого отношения указываются имя отношения, имена атрибутов (и соответствующих доменов) и первичный ключ. Вот пример такого определения (и соответствующего DROP):

RELATION S (S#, SNAME_NAME, STATUS, CITY) KEY S#

DROP S



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