Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных.doc
Скачиваний:
114
Добавлен:
16.03.2016
Размер:
5.67 Mб
Скачать

11.3. Ограничения целостности и язык ocl

Как уже отмечалось, в диаграммах классов могут указываться ограничения целостности, которые должны поддерживаться в проектируемой БД. В UML допускаются два способа определения ограничений: на естественном языке и на языке OCL. На рис. 11.13показана простая диаграмма классовСтудентиУниверситетс ограничением, выраженным на естественном языке.

В данном случае накладывается ограничение на состояние объектов классов СтудентиУниверситет, входящих в один экземпляр ассоциации. Объект классаСтудент может

56 Поскольку UML – это высокоуровневый язык моделирования, в нем не уточняется, что такое навигация в реализационном смысле. Но очевидно, что само появление понятия навигации связано с объектно-ориентированной природой UML. Термин «навигация» является почти ругательным в мире реляционных БД, но для мира объектно-ориентированных БД он вполне естественен, поскольку в этом мире на модельном уровне присутствует понятие ссылки, или указателя.

57 С точки зрения реляционных БД ассоциации с однонаправленной навигацией можно считать указанием на необходимость ограничения видимости объектов БД. Соответствующую (но существенно более общую) возможность в SQL-ориентированных БД обеспечивает механизм представлений (view). Подробнее об этом см. в лекции 18.

Рис. 11.13.Ограничение, выраженное на естественном языке

входить в экземпляр связи с объектом класса Университеттолько при условии, что размер стипендии данного студента находится в диапазоне, допустимом в данном университете.

11.3.1. Общая характеристика языка ocl

Более точный и лаконичный способ формулировки ограничений обеспечивает язык OCL (Object Constraints Language). Вот общая характеристика этого языка.

Из языка UML58)в OCL заимствованы, в первую очередь, следующие концепции:

  • класс, атрибут, операция;

  • объект (экземпляр класса);

  • ассоциация;

  • тип данных (включая набор предопределенных типов Boolean, Integer, Real и String);

  • значение (экземпляр типа данных).

Для понимания языка OCL существенны определяемые в UML традиционные для объектных моделей данных различия между объектом некоторого класса и значением некоторого типа:

  • объект обладает уникальным идентификатором и может сравниваться с другими объектами только по значению идентификатора; следствием этого является возможность определения операций над множествами объектов в терминах их идентификаторов59);

  • объект может быть ассоциирован через бинарную связь60)с другими объектами, что позволяет определить в OCL операцию перехода от данного объекта к связанным с ним объектам;

  • в то же время значение является «чистым значением» в том смысле, что:

    • при сравнении двух значений проверяются сами эти значения;

    • кроме того, значения не могут участвовать в связях, поскольку понятие связи определено только для объектов классов.

58 Хотя язык OCL формально считается частью UML, он специфицирован в отдельном документе, в котором присутствуют ссылки на другие части спецификации UML, а также вводятся собственные понятия и определения.

59 Следует заметить, что ни в спецификации UML, ни в описании какой-либо другой объектной модели никогда прямо не говорится, что в операциях над множествами объектов в действительности участвуют идентификаторы объектов. Но другого понимания не существует.

60 Обратите внимание, что хотя, в UML допускаются n-арные связи, в OCL речь идет только об уже привычном для нас бинарном варианте.

В дополнение к скалярным типам данных, заимствованным из UML, в OCL предопределены структурные типы, которые являются разновидностями типов коллекций (collection):

  • математическое множество (set), неупорядоченная коллекция, не содержащая одинаковых элементов;

  • мультимножество (bag), неупорядоченная коллекция, которая может содержать повторяющиеся элементы-дубликаты;

  • последовательность (sequence), упорядоченная коллекция, которая может содержать элементы-дубликаты.61)

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

Язык OCL предназначен, главным образом, для определения ограничений целостности данных, соответствующих модели, которая представлена в терминах диаграммы классов UML. OCL может применяться для определения ограничений, описывающих пред- и постусловия операций классов, и ограничений, представляющих собой инварианты классов. При проектировании реляционных баз данных возможность определения пред- и постусловий операций вряд ли может оказаться существенной62). С точки зрения определения ограничений целостности баз данных более важны средства определения инвариантов классов.