Базы данных Лекция 11 Проектирование реляционных баз данных с использованием семантических моделей: диаграммы классов языка UML 1
Базы данных Основные понятия диаграмм классов UML Лекция 11 Диаграммой классов в терминологии UML называется диаграмма, на которой показан набор классов, а также связей между этими классами. Кроме того, диаграмма классов может включать комментарии и ограничения. Ограничения могут неформально задаваться на естественном языке или же могут формулироваться на языке объектных ограничений OCL (Object Constraints Language). 2
Базы данных Классы, атрибуты, операции Лекция 11 Классом называется именованное описание совокупности объектов с общими атрибутами, операциями, связями и семантикой. Графически класс изображается в виде прямоугольника. У каждого класса должно быть имя (текстовая строка), уникально отличающее его от всех других классов. При формировании имен классов в UML допускается использование произвольной комбинации букв, цифр и даже знаков препинания. На практике рекомендуется использовать в качестве имен классов короткие и осмысленные прилагательные и существительные, каждое из которых начинается с заглавной буквы. 3
Базы данных Классы, атрибуты, операции Лекция 11 Атрибутом класса называется именованное свойство класса, описывающее множество значений, которые могут принимать экземпляры этого свойства. Класс может иметь любое число атрибутов (в частности, не иметь ни одного атрибута). Свойство, выражаемое атрибутом, является свойством моделируемой сущности, общим для всех объектов данного класса. Так что атрибут является абстракцией состояния объекта. Любой атрибут любого объекта класса должен иметь некоторое значение. Имена атрибутов представляются в разделе класса, расположенном под именем класса. На практике рекомендуется использовать короткие прилагательные и существительные, отражающие смысл соответствующего свойства класса. Первое слово в имени атрибута рекомендуется писать с прописной буквы, а все остальные слова с заглавной. 4
Базы данных Классы, атрибуты, операции Лекция 11 Например 5
Базы данных Классы, атрибуты, операции Лекция 11 Операцией класса называется именованная услуга, которую можно запросить у любого объекта этого класса. Операция это абстракция того, что можно делать с объектом. Класс может содержать любое число операций (в частности, не содержать ни одной операции). Набор операций класса является общим для всех объектов данного класса. Операции класса определяются в разделе, расположенном ниже раздела с атрибутами. Для именования операций рекомендуется использовать глагольные формы, соответствующие ожидаемому поведению объектов данного класса. Описание операции может также содержать её сигнатуру, т. е. имена и типы всех параметров, а если операция является функцией, то и тип её значения. 6
Базы данных Классы, атрибуты, операции Лекция 11 Например 7
Базы данных Категории связей Лекция 11 В диаграмме классов могут участвовать связи трёх разных категорий: зависимость (dependency); обобщение (generalization): ассоциация (association). При проектировании реляционных БД наиболее важны вторая и третья категории связей. 8
Базы данных Связь-зависимость Лекция 11 Зависимостью называют связь по применению, когда изменение в спецификации одного класса может повлиять на поведение другого класса, использующего первый класс. Чаще всего зависимости применяют в диаграммах классов, чтобы отразить в сигнатуре операции одного класса тот факт, что параметром этой операции могут быть объекты другого класса. Зависимость показывается прерывистой линией со стрелкой, направленной к классу, от которого имеется зависимость. При проектировании реляционных БД зависимости не используются. 9
Базы данных Связи-обобщения и механизм наследования классов в UML Лекция 11 Связью-обобщением называется связь между общей сущностью, называемой суперклассом, или родителем, и более специализированной разновидностью этой сущности, называемой подклассом, или потомком. Обобщения иногда называют связями «is a», имея в виду, что класс- потомок является частным случаем класса-предка. Класс-потомок наследует все атрибуты и операции класса-предка, но в нем могут быть определены дополнительные атрибуты и операции. Объекты класса-потомка могут использоваться везде, где могут использоваться объекты класса-предка. Это свойство называют полиморфизмом по включению, имея в виду, что объекты потомка можно считать включаемыми во множество объектов класса-предка. Графически обобщения изображаются в виде сплошной линии с большой незакрашенной стрелкой, направленной к суперклассу. 10
Базы данных Связи-обобщения и механизм наследования классов в UML Лекция 11 Например 11
Базы данных Связи-обобщения и механизм наследования классов в UML Лекция 11 Одиночное наследование является достаточным в большинстве случаев применения связи-обобщения. Однако в UML допускается и множественное наследование, когда один подкласс определяется на основе нескольких суперклассов. Например: При использовании UML для проектирования реляционных БД нужно очень осторожно использовать наследование классов вообще и стараться избегать множественного наследования. 12
Базы данных Связи-ассоциации: роли, кратность, агрегация Лекция 11 Ассоциацией называется структурная связь, показывающая, что объекты одного класса некоторым образом связаны с объектами другого или того же самого класса. Допускается, чтобы оба конца ассоциации относились к одному классу. В ассоциации могут связываться два класса, и тогда она называется бинарной. Допускается создание ассоциаций, связывающих сразу n классов (они называются n-арными ассоциациями). Графически ассоциация изображается в виде линии, соединяющей класс сам с собой или с другими классами. С понятием ассоциации связаны четыре важных дополнительных понятия: имя; роль; кратность; агрегация. 13
Базы данных Связи-ассоциации: роли, кратность, агрегация Лекция 11 Смысл имени уточняется с помощью черного треугольника, который располагается над линией связи справа или слева от имени ассоциации. Этот треугольник указывает направление чтения имя связи. Другим способом именования ассоциации является указание роли каждого класса, участвующего в этой ассоциации. Роль класса, как и имя конца связи в ER-модели, задается именем, помещаемым под линией ассоциации ближе к данному классу. 14
Базы данных Связи-ассоциации: роли, кратность, агрегация Лекция 11 Кратностью (multiplicity) роли ассоциации называется характеристика, указывающая, сколько объектов класса с данной ролью может или должно участвовать в каждом экземпляре ассоциации. Наиболее распространенным способом задания кратности роли ассоциации является указание конкретного числа или диапазона. 15
Базы данных Связи-ассоциации: роли, кратность, агрегация Лекция 11 Обычная ассоциация между двумя классами характеризует связь между равноправными сущностями: оба класса находятся на одном концептуальном уровне. Но иногда в диаграмме классов требуется отразить тот факт, что ассоциация между двумя классами имеет специальный вид «часть- целое». В этом случае класс «целое» имеет более высокий концептуальный уровень, чем класс «часть». Ассоциация такого рода называется агрегатной. Графически агрегатные ассоциации изображаются в виде простой ассоциации с незакрашенным ромбом на стороне класса-«целого». 16
Базы данных Связи-ассоциации: роли, кратность, агрегация Лекция 11 Бывают случаи, когда связь «части» и «целого» настолько сильна, что уничтожение «целого» приводит к уничтожению всех его «частей». Агрегатные ассоциации, обладающие таким свойством, называются композитными, или просто композициями. При наличии композиции объект-часть может быть частью только одного объекта-целого (композита). При обычной агрегатной ассоциации «часть» может одновременно принадлежать нескольким «целым». Графически композиция изображается в виде простой ассоциации, дополненной закрашенным ромбом со стороны «целого». 17
Базы данных Связи-ассоциации: роли, кратность, агрегация Лекция 11 Если не оговорено иное, то навигация по ассоциации может проводиться в обоих направлениях. Бывают случаи, когда желательно ограничить направление навигации для некоторых ассоциаций. В этом случае на линии ассоциации ставится стрелка, указывающая направление навигации. 18
Базы данных Ограничения целостности и язык OCL Лекция 11 В диаграммах классов могут указываться ограничения целостности, которые должны поддерживаться в проектируемой БД. В UML допускаются два способа определения ограничений: на естественном языке; на языке OCL. Пример с использованием естественного языка: 19
Базы данных Общая характеристика языка OCL Лекция 11 Более точный и лаконичный способ формулировки ограничений обеспечивает язык OCL (Object Constraints Language). Из языка UML в OCL заимствованы, в первую очередь, следующие концепции: класс, атрибут, операция; объект (экземпляр класса); ассоциация; тип данных (включая набор предопределенных типов Boolean, Integer, Real и String); значение (экземпляр типа данных). 20
Базы данных Общая характеристика языка OCL Лекция 11 Для понимания языка OCL существенны определяемые в UML традиционные для объектных моделей данных различия между объектом некоторого класса и значением некоторого типа: объект обладает уникальным идентификатором и может сравниваться с другими объектами только по значению идентификатора; следствием этого является возможность определения операций над множествами объектов в терминах их идентификаторов; объект может быть ассоциирован через бинарную связь с другими объектами, что позволяет определить в OCL операцию перехода от данного объекта к связанным с ним объектам; в то же время значение является «чистым значением» в том смысле, что: o при сравнении двух значений проверяются сами эти значения; o значения не могут участвовать в связях, поскольку понятие связи определено только для объектов классов. 21
Базы данных Общая характеристика языка OCL Лекция 11 В дополнение к скалярным типам данных, заимствованным из UML, в OCL предопределены структурные типы, которые являются разновидностями типов коллекций (collection): математическое множество (set), неупорядоченная коллекция, не содержащая одинаковых элементов; мультимножество (bag), неупорядоченная коллекция, которая может содержать повторяющиеся элементы-дубликаты; последовательность (sequence), упорядоченная коллекция, которая может содержать элементы-дубликаты. В OCL элементами каждого из трех типов коллекций могут быть либо объекты, либо значения. 22
Базы данных Инвариант класса Лекция 11 Под инвариантом класса в OCL понимается условие, которому должны удовлетворять все объекты данного класса. Если говорить более точно, инвариант класса это логическое выражение, вычисление которого должно давать true при создании любого объекта данного класса и сохранять истинное значение в течение всего времени существования этого объекта. При определении инварианта требуется указать имя класса и выражение, определяющее инвариант указанного класса. Синтаксически это выглядит следующим образом: context inv: Здесь является именем класса, для которого определяется инвариант, inv ключевое слово, говорящее о том, что определяется инвариант, и context ключевое слово, которое говорит о том, что контекстом следующего после двоеточия OCL-выражения являются объекты класса, т. е. OCL-выражение должно принимать значение true для всех объектов этого класса. 23
Базы данных Инвариант класса Лекция 11 OCL является типизированным языком, поэтому у каждого выражения имеется некоторый тип. Естественно, что OCL-выражение в инварианте класса должно быть логического типа. В общем случае OCL-выражение в определении инварианта основывается на композиции операций, которым посвящена большая часть определения языка. В спецификации языка эти операции условно разделены на следующие группы: операции над значениями предопределенных в UML (скалярных) типов данных; операции над объектами; операции над множествами; операции над мультимножествами; операции над последовательностями. 24
Базы данных Операции над значениями предопределенных типов данных Лекция 11 В OCL поддерживаются следующие заимствованные из определения UML скалярные типы данных: Boolean; Integer; Real; String. 25
Базы данных Операции над объектами Лекция 11 В OCL определены три операции над объектами: получение значения атрибута; переход по соединению, вызов операции класса (последняя операция для целей проектирования реляционных БД несущественна). Для записи этих трёх операций используется «точечная нотация». Например, результатом выражения вида. является текущее значение атрибута с именем имя атрибута, если объект имеет такой атрибут. В противном случае использование подобного выражения приводит к возникновению ошибки типа. Результатом применения к объекту операции перехода по соединению является коллекция, содержащая все объекты, которые ассоциированы с данным объектом через указываемое соединение. Это соединение идентифицируется именем роли, противоположной по отношению к данному объекту:. 26
Базы данных Операции над множествами, мультимножествами и последовательностями Лекция 11 В OCL поддерживается обширный набор операций над значениями коллекционных типов данных. Синтаксически операции над коллекциями записываются в нотации, аналогичной точечной, но вместо точки используется стрелка (): ( ) 27
Базы данных Операция select Лекция 11 В OCL определены три одноименных операции select, которые обрабатывают заданное множество, мультимножество или последовательность на основе заданного логического выражения над элементами коллекции. Результатом каждой операции является новое множество, мультимножество или последовательность, соответственно, из тех элементов входной коллекции, для которых результатом вычисления логического выражения является true. 28
Базы данных Операция collect Лекция 11 Аналогично набору операций select, в OCL определены три операции collect, параметрами которых являются множество, мультимножество или последовательность и некоторое выражение над элементами соответствующей коллекции. Результатом является мультимножество для операций collect, определенных над множествами и мультимножествами, и последовательность для операции collect, определенной над последовательностью. При этом результирующая коллекция соответствующего типа (коллекция значений или объектов) состоит из результатов применения выражения к каждому элементу входной коллекции. 29
Базы данных Операции exists, forAll, size Лекция 11 В OCL определены три одноименных операции exists над множеством, мультимножеством и последовательностью, дополнительным параметром которых является логическое выражение. В результате каждой из этих операций выдается true в том и только в том случае, когда хотя бы для одного элемента входной коллекции значением логического выражения является true. В противном случае результатом операции является false. Операции forAll отличаются от операций exists тем, что в результате каждой из них выдается true в том и только в том случае, когда для всех элементов входной коллекции результатом вычисления логического выражения является true. В противном случае результатом операции будет false. Операция size применяется к коллекции и выдает число содержащихся в ней элементов. 30
Базы данных Операции union, intersect, symmetricDifference Лекция 11 Параметрами двуместных операций union, intersect, symmetricDifference являются две коллекции, причём в OCL операции определены почти для всех возможных комбинаций типов коллекции. Результатом операции union, определенной над множеством и мультимножеством, является мультимножество, т. е. из результата объединения таких двух коллекций дубликаты не исключаются. Результатом же операции union, определенной над двумя множествами, является множество, т. е. в этом случае возможные дубликаты должны быть исключены. 31
Базы данных Примеры инвариантов Лекция 11 Определить ограничение «возраст служащих должен быть больше 18 и меньше 100 лет». context Служащий inv: self.возраст > 18 and self.возраст < 100 В условном выражении инварианта ключевое слово self обозначает текущий объект класса-контекста инварианта. 32
Базы данных Примеры инвариантов Лекция 11 Выразить на языке OCL ограничение, в соответствии с которым в отделах с номерами больше 5 должны работать служащие старше 30 лет. context Отдел inv: self.номер 5 or self.служащий select(возраст 30) size()=0 или context Сотрудник inv: self.возраст>30 or self.отдел.номер 5 33
Базы данных Примеры инвариантов Лекция 11 Определить ограничение, в соответствии с которым у каждого отдела должен быть менеджер, и любой отдел должен быть основан не раньше соответствующей компании: context Отдел inv: self.служащий exists(должность = "manager") and self.компания.годОснования self.годОснования 34
Базы данных Примеры инвариантов Лекция 11 Ограничить максимально возможное количество служащих компании числом 1000: context Компания inv: self.отдел collect(служащие) size()
Базы данных Плюсы и минусы использования языка OCL при проектировании реляционных баз данных Лекция 11 Плюс: язык позволяет формально и однозначно определять ограничения целостности БД в терминах её концептуальной схемы. Минус: сложность языка и неочевидность некоторых его конструкций. 36
Базы данных Получение схемы реляционной базы данных из диаграммы классов UML Лекция 11 Рекомендации: Прежде чем определять в классах операции, подумайте, что вы будете делать с этими определениями в среде целевой РСУБД. Помните, что сравнительно эффективно в РСУБД реализуются только ассоциации видов «один ко многим» и «многие ко многим». Для технологии реляционных БД агрегатные и в особенности композитные ассоциации неестественны. Подумайте о том, что вы хотите получить в реляционной БД, объявив некоторую ассоциацию агрегатной. В спецификации UML говорится о том, что, определяя однонаправленные связи, вы можете способствовать эффективности доступа к некоторым объектам. Для технологии реляционных баз данных поддержка такого объявления вызовет дополнительные накладные расходы и тем самым снизит эффективность. Не злоупотребляйте возможностями OCL. 37
Базы данных Выводы Лекция 11 Этап диаграммного моделирования обеспечивает следующие преимущества: на раннем этапе проектирования до привязки к конкретной РСУБД проектировщик может обнаружить и исправить логические недочёты проекта, руководствуясь наглядным графическим представлением концептуальной схемы; окончательный вид концептуальной схемы, полученной непосредственно перед переходом к формированию реляционной схемы, должен стать частью документации целевой реляционной БД; наличие этой документации очень полезно для сопровождения и, в особенности, для изменения схемы БД в связи с изменившимися требованиями; при использовании CASE-средств концептуальное моделирование БД может стать частью всего процесса проектирования целевой информационной системы, что должно способствовать правильной структуризации процесса, эффективности и повышению качества проекта в целом. 38