- •Глава 1 Внешние модели данных
- •1.1. Общие положения
- •1.2. Иерархическая модель
- •1.3. Целостность иерархической модели
- •Уникальность
- •Обязательность и множественность
- •Кортежи
- •Виртуальные атрибуты
- •Правила активности
- •1.4. Построение иерархических моделей
- •Ориентация модели
- •Выбор ключевых атрибутов
- •3 Посвященному пользователю этот набор цифр — номер зачетной книжки — тоже может сказать кое-что; например, первые две цифры — о годе поступления студента.
- •1.5. Модель «гиперкуб данных»
Выбор ключевых атрибутов
Задача выбора ключевых атрибутов встает перед разработчиком в том случае, когда моделируемая сущность имеет несколько идентификаторов. Лишь один из них может быть назначен в качестве первичного ключа1. В основу выбора могут быть положены следующие принципы:
простой ключ удобнее составного. Например, для сущности «Студент» в качестве первичного ключа удобнее использовать атрибут «код», чем совокупность атрибутов «спец», «группа», «нпп» (см. рис. 1.5);
труднодоступные атрибуты неудобны в качестве ключей. Если атрибут вводится в состав первичного ключа, он автоматически становится обязательным. Значение ключевого атрибута должно быть известно к моменту занесения экземпляра сущности в базу данных и не может быть отложено «на потом», что может существенно увеличить трудоемкость организации первоначального заполнения базы данных. Например, если в базе данных деканата в качестве первичного ключа сущности «Студент» назначить атрибут «паспорт», то придется организовать получение паспортных данных зачисленных студентов еще до того, как они фактически появятся на факультете;
•ключи, значения которых формируются в базе данных («номер по порядку» и т.п.), более удобны для контроля и управления чем те, у которых значения поступают извне («паспорт» и т. п.)2
• ключи, значения которых, помимо своей уникальности, несут некоторый смысл для пользователя, более удобны для него, чем бессмысленный набор цифр или букв. Ключ «Сидоров» во многих ситуациях, по-видимому, больше говорит пользователю, чем номер «015225»3.
Искусственное придание уникальности атрибуту иногда используется, чтобы сформировать ключ, удобный для пользователя. Например, используя фамилию сотрудника в качестве ключа, можно искусственно дополнять ее в случае наличия однофамильцев: «Иванов-второй», «Петров-4» и т. п.
Противоречивость перечисленных требований к ключевым атрибутам очевидна. Трудно дать рекомендации на все случаи жизни. Поэтому разработчик вынужден проводить индивидуальный анализ возможных ключей в каждом конкретном случае.
1 На концептуальном уровне проектирования эта задача не столь актуальна как, скажем, на логическом, где первичные ключи таблиц базы данных должны быть заданы обязательно. В данном случае задача выбора возникает скорее в связи с тем, что на диаграмме модели нужно изобразить квадратики у ключевых атрибутов. Не следует рассматривать этот выбор как окончательный.
2 Использование суррогатных ключей (см. сноску на с. 29) является крайним случаем применения этого принципа. Следует отметить, что такой подход, если его использовать на концептуальном уровне, ведет к появлению атрибутов, не обусловленных информационными потребностями пользователей. Многие авторитеты в области баз данных вообще не приветствуют идею суррогатных ключей.
3 Посвященному пользователю этот набор цифр — номер зачетной книжки — тоже может сказать кое-что; например, первые две цифры — о годе поступления студента.
Конструирование агрегатов
Соответствие агрегатов классам объектов моделируемой предметной области или их взаимодействию — важный принцип, которым следует руководствоваться при конструировании агрегатов. Иными словами, нужно стремиться к тому, чтобы каждому агрегату модели в моделируемой предметной области соответствовал некоторый достаточно четко определенный для пользователя класс предметов, явлений, событий и т. п.
Пример. Во всех примерах, рассмотренных выше, мы старались следовать этому принципу. На (рис. 1.16) представлен расширенный пример, иллюстрирующий соответствие агрегатов и классов объектов предметной области. Слева на рисунке изображены классы объектов предметной области: «Студент», «Паспорт», «Телефон», «Предмет», изучаемый студентом. «Преподаватель», преподающий предмет, «Сдача» (зачета или экзамена), а справа — соответствующие агрегаты в виде иерархической модели.
Эффект от применения этого принципа состоит в том, что, с одной стороны, пользователю будут понятны критерии объединения вместе тех или иных атрибутов, их назначение, с другой стороны, как будет показано в следующей главе, упростится, станет очевиднее процесс нормализации модели1.
1 И это еще не все!» Введите агрегат, сделайте его необязательным, а входящие в него атрибуты — обязательными и вы будете контролировать одновременность присутствия или отсутствия значений всех атрибутов в экземпляре агрегата! Bay!
'При обратном преобразовании значения определенных атрибутов становятся именами атрибутов. Таблица, получающаяся в результате такого преобразования, относится к так называемым кросс-таблицам (Cross-Tables, Crostabs).
Обобщение атрибутов
Обобщение атрибутов — преобразование модели, в результате которого несколько атрибутов заменяются одним многозначным агрегатом. Общая схема такого преобразования приведена на рис. 1.17. Здесь исходные неключевые атрибуты «атр1», «атр2», «атрЗ» преобразуются с многозначный агрегат «Обобщение» с атрибутами «имя» и «знач». Каждому экземпляру исходного атрибута в новой модели соответствует свой экземпляр многозначного агрегата. Атрибут «имя» в качестве значения содержит имя исходного атрибута, а атрибут «знач» — само значение.
Преобразование имен в значения — характерная особенность процедуры обобщения атрибутов. Имена исходных атрибутов в результате обобщения становятся значениями некоторых других атрибутов, являющихся ключевыми в новом многозначном агрегате. Процедура выборки значения атрибута из трехшаговой
—>экземпляр сущности с искомым ключом —> имя искомого атрибута —> значение искомого атрибута
превращается в четырехшаговую
—>экземпляр сущности с искомым ключом —> экземпляр агрегата с ключом, равным имени искомого атрибута —> имя атрибута, содержащего значения обобщенных атрибутов —> значение атрибута.
Новая модель эквивалентна исходной, поскольку атрибут «имя» является идентификатором агрегата «Обобщение», так как содержащиеся в нем имена атрибутов уникальны для каждого экземпляра исходной сущности и, следовательно, всегда имеется возможность однозначно определить значение исходного атрибута, зная его имя.
Новая модель обратима в том смысле, что ее всегда можно преобразовать в эквивалентную исходную модель1. Этот факт существенен для нас, поскольку для пользователя нужно именно исходное представление данных и на последующих этапах проектирования неизбежно встанет вопрос о том, как из глобальной базы данных извлечь данные в локальном представлении конкретного пользователя. Подробно этот вопрос обсуждается в последней главе.
кратно обсуждалась выше. В исходной модели обобщаемые атрибуты-имена предметов являются необязательными (студент может не иметь оценки по данному предмету — сейчас или никогда), поэтому многозначный агрегат «СдачаПредм» также является необязательным (отсутствие экземпляров означает, что студент не имеет оценок ни по одному предмету). Вместе с тем, атрибуты, входящие в многозначный агрегат, являются обязательными (если присутствует название предмета, то должна присутствовать и оценка по предмету, и наоборот).
Особенности обобщения атрибутов, а также преимущества их использования заключаются в следующем:
уровень абстракции модели при обобщении атрибутов повышается, поскольку от совокупности отдельных элементов (атрибутов) мы переходим к их классу (в виде многозначного агрегата). Более абстрактная модель может быть менее понятной для пользователя, но часто более удобной для разработчика при проектировании базы данных;
компактность представления модели повышается. Так, в рассмотренном выше примере для отображения всех предметов, которые сдают студенты некоторой специальности, требуется около сотни атрибутов, в то время как в обобщенной модели для этого достаточен один многозначный агрегат с двумя атрибутами.
обобщение агрегатов выполняется аналогично обобщению одиночных атрибутов. Пусть помимо полученной студентом оценки требуется отразить в модели и другую информацию: дату сдачи, сведения о преподавателе, выставившем оценку и т. п. Тогда в исходной модели атрибуты-предметы придется заменить соответствующими однозначными агрегатами и продублировать во всех из них атрибуты «оценка», «датаСдачи», «кодПреподава-теля» и т.д. (рис.19). Каждому экземпляру однозначного агрегата исходной модели соответствует свой экземпляр в многозначном агрегате обобщенной модели. Вместо стократного дублирования достаточно добавить в многозначный агрегат по одному новому атрибуту;
• обязательность агрегата, построенного в результате обобщения, зависит от обязательности обобщаемых атрибутов. При обобщении атрибутов, если все они необязательные, то и результирующий агрегат является необязательным, а если все они обязательные, то и результирующий агрегат является обязательным. Если же хотя бы один из обобщаемых атрибутов является обязательным, то результирующий агрегат в целом должен быть обязательным, но при этом возникают дополнительные ограничения на обязательность присутствия в многозначном агрегате экземпляров с определенными значениями ключевого атрибута. Аналогичным образом нетрудно построить правила для случая, кода обобщаются целые агрегаты одинаковой структуры.
Какие атрибуты / агрегаты обобщать? Этот вопрос актуален, поскольку формально (см. рис. 1.17) можно обобщить практически любые неключевые атрибуты (запрячь в одну телегу «коня и трепетную лань»). Ответ на этот вопрос лежит скорее в области здравого смысла, нежели формальной теории. Не доводить дело до абсурда, учитывать последствия применительно к конкретному случаю — вот принципы, которыми должен руководствоваться разработчик при принятии решения об обобщении атрибутов. Тем не менее, попытаемся сформулировать несколько общих положений:
«родственные» атрибуты / агрегаты наиболее подходят для обобщения. В результате обобщения исходные самостоятельные атрибуты / агрегаты становятся элементами некоторого множества, класса, и желательно, чтобы это множество объединяло сходные в некотором смысле элементы. К сожалению, понятие «родственный» является интуитивным, выявление сходства иногда требует от разработчика особого «чутья», способности глубокого анализа предметной области;
одинаковые по структуре агрегаты, имеющие одинаковый состав однотипных атрибутов, являются очевидными кандидатами на выявление их родственности с целью дальнейшего обобщения. Агрегаты с различающейся структурой перед обобщением необходимо привести «к общему знаменателю», т.е. сделать идентичными количество, имена, ограничения целостности для соответствующих атрибутов;
большое количество родственных атрибутов / агрегатов является убедительным основанием для обобщения. Стоит ли «огород городить» из-за двух или трех атрибутов? Если же цена вопроса выражается десятками атрибутов, то решение упростить модель путем обобщения выглядит вполне обоснованным;
большая обновляемость состава атрибутов или агрегатов, т. е. возможность плохо предсказуемого появления в будущем новых атрибутов / агрегатов, изменения или удаления существующих, также может служить основанием для обобщения. Операции добавления, удаления или изменения атрибута требуют модификации структуры базы данных. В обобщенной модели эти операции сводятся к изменению содержимого базы данных. Изменение структуры требует больших затрат, нежели изменение содержимого.
При обратном преобразовании значения определенных атрибутов становятся именами атрибутов. Таблица получающая в результате такого преобразования, относятся к так называемым кросс-таблицам (Cross-Tables, Crostabs)