- •Глава 1 Внешние модели данных
- •1.1. Общие положения
- •1.2. Иерархическая модель
- •1.3. Целостность иерархической модели
- •Уникальность
- •Обязательность и множественность
- •Кортежи
- •Виртуальные атрибуты
- •Правила активности
- •1.4. Построение иерархических моделей
- •Ориентация модели
- •Выбор ключевых атрибутов
- •3 Посвященному пользователю этот набор цифр — номер зачетной книжки — тоже может сказать кое-что; например, первые две цифры — о годе поступления студента.
- •1.5. Модель «гиперкуб данных»
Обязательность и множественность
Ограничения обязательности отвечают на вопрос о том, должны ли значения некоторого атрибута (атрибутов) присутствовать во всех экземплярах некоторой сущности или агрегата. Например, у каждого студента имеются код, фамилия, имя, отчество и они обязательно должны присутствовать в экземпляре сущности «Студент». Вместе с тем, в модели на рис. 1.6 для каждого студента предусмотрен многозначный атрибут «телефон» — сведения о контактных телефонах студента. Для одного студента можно задать несколько значений «телефона». Возникает вопрос, допустимы ли экземпляры студентов, у которых вовсе отсутствует значение этого атрибута? Вполне можно (хотя и с трудом) представить студента, у которого нет (физически) телефона, т. е. нечего записать в базу данных. Таким образом, необходимо иметь возможность отражать в модели обязательные и необязательные атрибуты.
Изображение обязательных и необязательных атрибутов в модели иллюстрируется на рис. 1.7. Общая идея такова: обязательные атрибуты помечаются затемненными символами, необязательные — символами с просветом. В соответствии с этим общим правилом ключевые атрибуты, помеченные затемненными квадратами, являются обязательными. Неключевые обязательные атрибуты помечены черными кружками, а необязательные — светлыми. Необязательный многозначный атрибут «телефон» помечен стрелкой со светлым наконечником.
Изображение обязательных и необязательных агрегатов следует тому же правилу. Необязательный атрибут «Паспорт» помечен светлым кружком, поэтому в конкретном экземпляре «Студент» могут отсутствовать (целиком) значения всех атрибутов, составляющих этот агрегат. Однако, если агрегат присутствует, то в нем должны быть в наличии значения всех его атрибутов («серия», «номер», «выдан»), поскольку все они помечены как обязательные. Необязательный многозначный агрегат «Предмет» помечен светлой стрелкой, это означает, что допустимы экземпляры «Студент», не сдававшие ни одного предмета. В то же время, многозначный агрегат «Сдача» помечен затемненной стрелкой, следовательно, он является обязательным, т. е. в экземпляре «Предмет», если уж он присутствует, должен быть хотя бы один экземпляр «Сдача».
Интерпретация отсутствующих значений необязательных атрибутов и агрегатов может быть различной. Чаще всего используются следующие два варианта:
«значение неизвестно» — реальный объект, который отражается в экземпляре сущности с отсутствующим значением атрибута или агрегата, на самом деле имеет это значение, но оно нам не известно. Например, мы абсолютно уверены в том, что каждый студент имеет паспорт, но нам могут быть неизвестны паспортные данные некоторых конкретных студентов;
«значение невозможно» — реальный объект, который отражается в экземпляре сущности, принципиально не может иметь значений у соответствующих атрибутов или агрегатов1. Например, атрибут «контракт» (см. рис. 1.7) имеет смысл только для студентов-контрактников и невозможен у студентов-бюджетников. Можно условиться, что отсутствие значения у атрибута «контракт» означает, что перед нами студент-бюджетник, иначе — студент-контрактник.
Неоднозначность в интерпретации отсутствующего значения возникает, когда оба этих варианта действуют одновременно. Например, при отсутствии атрибута «контракт» может быть неизвестно, то ли это студент-бюджетник, то ли мы просто не знаем номер его контракта. В этом примере проблема разрешается путем введения обязательного атрибута «категория», принимающего значение, скажем, «Б» у бюджетников и «К» у контрактников. Теперь отсутствие атрибута «контракт» означает, что значение нам не известно. При этом требуется дополнительное ограничение-условие: если атрибут «категория» имеет значение «Б», то атрибут «контракт» вовсе не должен иметь значения.
Обязательность экземпляра сущности — это необходимость существования определенного экземпляра сущности, имеющего определенные значения атрибутов. Подобное ограничение, например, возникает при использовании атрибутов-ссылок, т.е. атрибутов, содержащих значения идентификаторов (первичных ключей) других экземпляров сущности.
Пример. На рис. 1.8 представлена модель сущности «Сотрудник», каждый экземпляр которой содержит сведения о некотором сотруднике. Атрибут «начальник» — это ссылка на другой экземпляр сущности «Сотрудник»; он содержит значение «кода» сотрудника, являющегося начальником данного сотрудника. Сам атрибут «начальник» необязательный (у сотрудника может и не быть начальника), но если он есть, то соответствующий сотрудник-начальник должен существовать, т.е. должен существовать экземпляр сущности, у которого значение атрибута «код» совпадает со значением атрибута «начальник» данного экземпляра сущности. На диаграмме модели атрибут-ссылка выделяется пунктирной линией, ведущей к идентификатору или ключу, значение которого она содержит. Черный кружок на конце линии подчеркивает необходимость существования соответствующего экземпляра.
Ограничение многозначности задает допустимый диапазон для числа экземпляров многозначного атрибута или агрегата. Нулевое значение нижней границы диапазона означает необязательность, ненулевое — обязательность. Верхняя граница может быть не задана — сколько угодно экземпляров (обычно действует по умолчанию, обозначается символом «*»). В простом случае границы являются константами, не зависящими от значений других атрибутов сущностей базы данных. Например, число попыток сдачи предмета студентом не должно превышать трех и тогда диапазон количества экземпляров агрегата «Сдача» равен [1..3]. В более сложных случаях границы могут зависеть от значений других атрибутов и должны вычисляться по определенному алгоритму для каждого экземпляра сущности или экземпляра родительского агрегата. Например, можно представить, что максимальное число попыток сдачи предмета зависит от категории студента, или, скажем, от его среднего балла и т. п.
1Строго говоря, такая ситуация невозможна для атрибута в философском смысле как существенного признака, неотъемлемого, постоянного свойства предмета. Правильнее говорить в этом случае не об атрибуте, а о модусе — переходящем свойстве.-нриеущем предмету лишь в некоторых состояниях. Однако в информатике до таких тонкостей не опускаются й говорят об отсутствии атрибута у предмета.
2Трехзначная логика — формальный логический язык, представляющий собой алгебру высказываний, которые помимо значений классической логики «истина» и «ложь» могут принимать еще одно значение — «неопределенно».
Домены
Ограничения домена — это ограничения на значения, которые может принимать атрибут. Под доменом (Domain) понимается множество значений данных какого-либо типа, на котором принимают значения те или иные атрибуты сущности. При занесении значения атрибута в базу данных или при изменении его СУБД должна убедиться в том, что значение принадлежит соответствующему домену и только в этом случае выполнить операцию. Из одного домена, вообще говоря, могут принимать значения несколько разных атрибутов. Например, атрибуты «Студент.фио» (фамилия, имя и отчество студента) и «Студент.Предмет.Принял.фио» (фамилия, имя и отчество преподавателя, принявшего экзамен у студента) могут быть заданы на одном домене «ФИО» — множестве допустимых русскоязычных фамилий, имен, отчеств.
Задать домен, таким образом, это, значит, тем или иным способом очертить множество допустимых значений для атрибута так, чтобы можно было проверить, принадлежит ли значение атрибута этому множеству. В простейшем случае это можно сделать путем прямого перечисления допустимых элементов множества. Например, выше рассматривался атрибут «категория», который может принимать одно из двух значений: «Б» и «К»; домен с именем «категорияСтудента» может быть задан как множество
DOMAIN категорияСтудента = {"Б", "К"}.
В более сложных случаях домен не удается задать прямым перечислением и приходится применять косвенные способы в виде совокупности ограничений.
Стандартные ограничения при задании домена, чаще всего, следующие:
тип данных — строковые, числовые, даты, логические и т. д. Тип задает задает ограничения на символы, представляющие данные, их количество, структуру1. На концептуальном уровне абстракции вовсе не обязательно пользоваться базовыми (встроенными, стандартными) типами, предусмотренными средой реализации базы данных (используемой СУБД). Здесь нужны абстрактные типы данных, регламентирующие только внешние свойства значений данных, несвязанные с их внутренней компьютерной организацией и реализацией. Например, можно использовать такие типы, как «неотрицательное целое» или «рациональная дробь», а для домена атрибута «фио» задать тип «строка русских букв». На этапе логического проектирования базы данных встанет задача отображения абстрактных типов данных на базовые типы используемой СУБД;
диапазон значений — в каком диапазоне могут принимать свои значения экземпляры из этого домена. Например, если по действующим нормам количество студентов в группе не должно превышать 30 человек, то это значение является верхней границей для домена «нпп», на котором задан одноименный атрибут, отражающий номер по порядку студента в группе (см. рис. 1.5). Нижняя граница, естественно, единица2;
формат — ограничения на внутреннюю структуру данных, совокупность правил (грамматика), которым должен подчиняться корректный экземпляр данных как последовательность символов некоторого алфавита. Например, в домене «фио» значения условимся записывать по следующим правилам: русские буквы; первым идет фамилия, вторым — имя, третьим — отчество; слова разделяются одним пробелом; слова записываются строчными буквами кроме прописных начальных; допустимы двойные фамилии, разделенные дефисом («Ляпкин-Тяпкин») и т.д. Другой пример — формат записи телефонных номеров (код страны, код населенного пункта, номер внутри населенного пункта). В результате соответствующего грамматического разбора принимается решение о том, соответствует ли данная строка формату данного домена;
условие допустимости (Validation Rule) — логическая функция, проверяющая значение атрибута и возвращающая логическое значение «истина» (значение принадлежит домену) или «ложь» (значение не принадлежит домену). Например, для домена «адрес электронной почты» можно составить программу-функцию, которая проверяет, что в строке символов, полученной в качестве аргумента, во-первых, внутри имеется в точности один символ «@», во-вторых, отсутствуют символы, запрещенные к использованию в электронном адресе.
1 Гип также определяет набор операций, допустимых с данными (со строками можно выполнять операции сцепления, вырезания и т.д., с числами — сложения, вычитания, умножения, деления и т.д., с датами — вычитания, сложения с целым числом и т. д.).
2 Нижнюю границу не потребуется задавать явно, если назначить домену в этом примере абстрактный тип «натуральное число».