Построение инфологической модели 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Построение инфологической модели



Анализ определенных выше объектов и атрибутов позволяет выделить сущности проектируемой базы данных и, приняв решение о создании реляционной базы данных, построить ее инфологическую модель на языке "Таблицы-связи" (рис. 5.2).

К стержневым сущностям можно отнести:

  1. Создатели (Код создателя, Создатель).

    Эта сущность отводится для хранения сведений об основных людях, принимавших участие в подготовке рукописи издания (авторах, составителях, титульных редакторах, переводчиках и художниках). Такое объединение допустимо, так как данные о разных создателях выбираются из одного домена (фамилия и имена) и исключает дублирование данных (один и тот же человек может играть разные роли в подготовке разных изданий). Например, С.Я.Маршак писал стихи (Сказка о глупом мышонке) и пьесы (Двенадцать месяцев), переводил Дж.Байрона, Р.Бернса, Г.Гейне и составлял сборники стихов.

    Так как фамилия и имена (инициалы) создателя могут быть достаточно громоздкими (М.Е. Салтыков-Щедрин, Франсуа Рене де Шатобриан, Остен Жюль Жан-Батист Ипполит и т.п.) и будут многократно встречаться в разных изданиях, то их целесообразно нумеровать и ссылаться на эти номера. Для этого вводится целочисленный атрибут "Код_создателя", который будет автоматически наращиваться на единицу при вводе в базу данных нового автора, переводчика или другого создателя.

    Аналогично создаются: Код_издательства, Код_заглавия, Вид_ издания, Код_характера, Код_языка, Номер_билета, Номер_пере- плета, Код_места и Код_издания, замещающие от одного до девяти атрибутов.
  2. Издательства (Код_издательства, Название, Город).
  3. Заглавия (Код_заглавия, Заглавие).

    Выделение этой сущности позволит сократить объем данных и снизить вероятность возникновения противоречивости (исключается необходимость ввода длинных текстовых названий для различных томов собраний сочинений, повторных изданий, учебников и т.п.).
  4. Вид_издания (Вид_издания, Название_вида).
  5. Характеры (Код_характера, Характер_переиздания).
  6. Языки (Код_языка, Язык, Сокращение).

    Кроме названия языка хранится его общепринятое сокращение (англ., исп., нем., фр.), если оно существует.
  7. Места (Код_места, Номер_комнаты, Номер_стеллажа, Номер_ полки).

    Один из кодов этой сущности (например, "-1") отведен для описания обобщенного места, находящегося за стенами хранилища книг (издание выдано читателю, временно передано другой библиотеке или организации).
  8. Читатели (Номер_билета, Фамилия, Имя, Отчество, Адрес, Телефон).

Две ключевые сущности, описывающие издание и его конкретные экземпляры, оказываются зависимыми от других сущностей и попадают в класс обозначений:

  1. Издание (Код_издания, Код_заглавия, Вид_издания, Номер_тома, Авторский_знак, Библиотечн_шифр, Повторность, Код_издательства, Год_издания, Аннотация) [Заглавия, Вид_издания, Издательства];
  2. Переплеты (Номер_переплета, Код_издания, Цена, Дата_приобретения)[Издания];

Стержневые сущности и обозначения связаны между собой ассоциациями:

  1. Авторы [Создатели M, Издание N] (Код_создателя, Код_издания).
  2. Составители [Создатели M, Издания N] (Код_создателя, Код_издания).
  3. Редакторы [Создатели M, Издания N] (Код_создателя, Код_издания).
  4. Художники [Создатели M, Издания N] (Код_создателя, Код_издания).
  5. Переводчики [Создатели M, Издания N] (Код_создателя, Код_издания, Язык).
  6. Переиздания [Характеры M, Издания N] (Код_характера, Код_издания).
  7. Размещение [Места M, Переплеты N] (Код_места, Номер_переплета, Дата_размещения, Дата_изъятия).
  8. Выдача [Читатели M, Переплеты N] (Номер_билета, Номер_переплета, Дата_выдачи, Срок, Дата_возврата).

И, наконец, для уменьшения объема часто используемого обозначения "Издания" из него выделена характеристика:

  1. Аннотации (Код_издания, Аннотация) {Издание}.

Рис. 5.2. Инфологическая модель базы данных "Библиотека", построенная с помощью языка "Таблицы-связи"

Проектирование базы данных

В соответствие с процедурой проектирования (п. 4.4) каждая из полученных сущностей должна быть представлена базовой таблицей. Первый вариант этих таблиц описывается так:

СОЗДАТЬ ТАБЛИЦУ Создатели *(Стержневая сущность) ПЕРВИЧНЫЙ КЛЮЧ (Код_создат) ПОЛЯ (Код_создат Целое, Фам_ИО Текст 30);СОЗДАТЬ ТАБЛИЦУ Издательства *(Стержневая сущность) ПЕРВИЧНЫЙ КЛЮЧ (Код_издательства) ПОЛЯ (Код_издательства Целое, Название Текст 40, Город Текст 25);СОЗДАТЬ ТАБЛИЦУ Заглавия *(Стержневая сущность) ПЕРВИЧНЫЙ КЛЮЧ (Код_заглавия) ПОЛЯ (Код_заглавия Целое, Заглавие Запись);СОЗДАТЬ ТАБЛИЦУ Вид_издания *(Стержневая сущность) ПЕРВИЧНЫЙ КЛЮЧ (Вид_издания) ПОЛЯ (Вид_издания Целое, Название_вида Текст 16);СОЗДАТЬ ТАБЛИЦУ Характеры *(Стержневая сущность) ПЕРВИЧНЫЙ КЛЮЧ (Код_характера) ПОЛЯ (Код_характера Целое, Характер_переиздания Текст 16);СОЗДАТЬ ТАБЛИЦУ Языки *(Стержневая сущность) ПЕРВИЧНЫЙ КЛЮЧ (Код_языка) ПОЛЯ (Код_языка Целое, Язык Текст 16, Сокращение Текст 6);СОЗДАТЬ ТАБЛИЦУ Места *(Стержневая сущность) ПЕРВИЧНЫЙ КЛЮЧ (Код_места) ПОЛЯ (Код_места Целое, Номер_комнаты Целое, Номер_стелажа Целое, Номер_полки Целое);СОЗДАТЬ ТАБЛИЦУ Читатели *(Стержневая сущность) ПЕРВИЧНЫЙ КЛЮЧ (Ном_билета) ПОЛЯ (Ном_билета Целое, Фамилия Текст 20, Имя Текст 16, Отчество Текст 20, Адрес Текст 60, Телефон Текст 9);СОЗДАТЬ ТАБЛИЦУ Издание *(Обозначение) ПЕРВИЧНЫЙ КЛЮЧ (Код_издания) ВНЕШНИЙ КЛЮЧ (Код_заглавия ИЗ Заглавия NULL-значения НЕ ДОПУСТИМЫ УДАЛЕНИЕ ИЗ Заглавия ОГРАНИЧИВАЕТСЯ ОБНОВЛЕНИЕ Заглавия.Код_заглавия ОГРАНИЧИВАЕТСЯ) ВНЕШНИЙ КЛЮЧ (Вид_издания ИЗ Вид_издания NULL-значения ДОПУСТИМЫ УДАЛЕНИЕ ИЗ Вид_издания ОГРАНИЧИВАЕТСЯ ОБНОВЛЕНИЕ Вид_издания.Вид_издания КАСКАДИРУЕТСЯ) ВНЕШНИЙ КЛЮЧ (Код_издательства ИЗ Издательства NULL-значения НЕ ДОПУСТИМЫ УДАЛЕНИЕ ИЗ Издательства ОГРАНИЧИВАЕТСЯ ОБНОВЛЕНИЕ Издательства.Код_издательства КАСКАДИРУЕТСЯ) ПОЛЯ (Код_издания Целое, Код_заглавия Целое, Вид_издания Текст 16, Номер_тома Целое, Авторский_знак Текст 3, Библиотечн_шифр Текст 12, Повторность Целое, Код_издательст- ва Целое, Год_издания Целое) ОГРАНИЧЕНИЯ (1. Значения полей Код_заглавия, Вид_издания и Код_издательства должны принадлежать набору значений соответствующих полей таблиц Заглавия, Вид_издания и Издательства; при нарушении вывод сообщения "Такого заглавия нет", "Такого вида издания нет" или "Такого издательства нет".);СОЗДАТЬ ТАБЛИЦУ Переплеты *(Обозначение) ПЕРВИЧНЫЙ КЛЮЧ (Номер_переплета) ВНЕШНИЙ КЛЮЧ (Код_издания ИЗ Издания NULL-значения НЕ ДОПУСТИМЫ УДАЛЕНИЕ ИЗ Издания ОГРАНИЧИВАЕТСЯ ОБНОВЛЕНИЕ Издания.Код_издания КАСКАДИРУЕТСЯ) ПОЛЯ (Номер_переплета Целое, Код_издания Целое, Цена Деньги, Дата_приобретения Дата) ОГРАНИЧЕНИЯ (Значения поля Код_издания должны принадлежать набору значений соответствующего поля таблицы Издания; при нарушении вывод сообщения "Такого издания нет");СОЗДАТЬ ТАБЛИЦУ Аннотации *(Характеризует Издания) ПЕРВИЧНЫЙ КЛЮЧ (Код_издания) ВНЕШНИЙ КЛЮЧ (Код_издания ИЗ Издания NULL-значения ДОПУСТИМЫ УДАЛЕНИЕ ИЗ Издания ОГРАНИЧИВАЕТСЯ ОБНОВЛЕНИЕ Издания.Код_издания КАСКАДИРУЕТСЯ) ПОЛЯ (Код_издания Целое, Аннотация Запись) ОГРАНИЧЕНИЯ (Значения поля Код_издания должны принадлежать набору значений соответствующего поля таблицы Издания; при нарушении вывод сообщения "Такого издания нет");СОЗДАТЬ ТАБЛИЦУ Авторы *(Связывает Создатели и Издания) ПЕРВИЧНЫЙ КЛЮЧ (Код_создателя, Код_издания) ВНЕШНИЙ КЛЮЧ (Код_создателя ИЗ Создатели NULL-значения НЕ ДОПУСТИМЫ УДАЛЕНИЕ ИЗ Создатели ОГРАНИЧИВАЕТСЯ ОБНОВЛЕНИЕ Создатели.Код_создателя КАСКАДИРУЕТСЯ) ВНЕШНИЙ КЛЮЧ (Код_издания ИЗ Издания NULL-значения НЕ ДОПУСТИМЫ УДАЛЕНИЕ ИЗ Издания ОГРАНИЧИВАЕТСЯ ОБНОВЛЕНИЕ Издания.Код_издания КАСКАДИРУЕТСЯ) ПОЛЯ (Код_создателя Целое, Код_издания Целое) ОГРАНИЧЕНИЯ (Значения полей Код_создателя и Код_издания должны принадлежать набору значений соответствующих полей таблиц Создатели и Издание; при нарушении вывод сообщения "Такого автора нет" или "Такого издания нет");

Аналогичное содержание имеют описания таблиц Составители, Редакторы, Художники и Переиздания. Остальные же таблицы проектируемой базы данных описываются так:

СОЗДАТЬ ТАБЛИЦУ Переводчики *(Связывает Создатели, Издания и Языки) ПЕРВИЧНЫЙ КЛЮЧ (Код_создателя, Код_издания) ВНЕШНИЙ КЛЮЧ (Код_создателя ИЗ Создатели NULL-значения НЕ ДОПУСТИМЫ УДАЛЕНИЕ ИЗ Создатели ОГРАНИЧИВАЕТСЯ ОБНОВЛЕНИЕ Создатели.Код_создателя КАСКАДИРУЕТСЯ) ВНЕШНИЙ КЛЮЧ (Код_издания ИЗ Издания NULL-значения НЕ ДОПУСТИМЫ УДАЛЕНИЕ ИЗ Издания ОГРАНИЧИВАЕТСЯ ОБНОВЛЕНИЕ Издания.Код_издания КАСКАДИРУЕТСЯ) ВНЕШНИЙ КЛЮЧ (Код_языка ИЗ Языки NULL-значения НЕ ДОПУСТИМЫ УДАЛЕНИЕ ИЗ Языки ОГРАНИЧИВАЕТСЯ ОБНОВЛЕНИЕ Языки.Код_языка КАСКАДИРУЕТСЯ) ПОЛЯ (Код_создателя Целое, Код_издания Целое) ОГРАНИЧЕНИЯ (Значения полей Код_создателя, Код_издания и Код_языка должны принадлежать набору значений соответствующих полей таблиц Создатели, Издание и Языки; при нарушении вывод сообщения "Такого автора нет" или "Такого издания нет" или "Такого языка нет");СОЗДАТЬ ТАБЛИЦУ Размещение *(Связывает Места и Переплеты) ПЕРВИЧНЫЙ КЛЮЧ (Код_места, Номер_переплета) ВНЕШНИЙ КЛЮЧ (Код_места ИЗ Места NULL-значения НЕ ДОПУСТИМЫ УДАЛЕНИЕ ИЗ Места ОГРАНИЧИВАЕТСЯ ОБНОВЛЕНИЕ Места.Код_места КАСКАДИРУЕТСЯ) ВНЕШНИЙ КЛЮЧ (Номер_переплета ИЗ Переплеты NULL-значения НЕ ДОПУСТИМЫ УДАЛЕНИЕ ИЗ Переплеты КАСКАДИРУЕТСЯ ОБНОВЛЕНИЕ Переплеты.Ном_переплета КАСКАДИРУЕТСЯ) ПОЛЯ (Код_места Целое, Номер_переплета Целое, Дата_размещения Дата, Дата_изъятия Дата) ОГРАНИЧЕНИЯ (Значения полей Код_места и Номер_переплета должны принадлежать набору значений соответствующих полей таблиц Переплеты и Места; при нарушении вывод сообщения "Такого переплета нет" или "Такого места нет");СОЗДАТЬ ТАБЛИЦУ Выдача *(Связывает Читатели и Переплеты) ПЕРВИЧНЫЙ КЛЮЧ (Ном_билета, Ном_переплета) ВНЕШНИЙ КЛЮЧ (Ном_билета ИЗ Читатели NULL-значения НЕ ДОПУСТИМЫ УДАЛЕНИЕ ИЗ Читатели КАСКАДИРУЕТСЯ ОБНОВЛЕНИЕ Читатели.Ном_билета КАСКАДИРУЕТСЯ) ВНЕШНИЙ КЛЮЧ (Ном_переплета ИЗ Переплеты NULL-значения НЕ ДОПУСТИМЫ УДАЛЕНИЕ ИЗ Переплеты КАСКАДИРУЕТСЯ ОБНОВЛЕНИЕ Переплеты.Ном_переплета КАСКАДИРУЕТСЯ) ПОЛЯ (Ном_билета Целое, Ном_переплета Целое, Дата_выдачи Дата, Срок Целое, Дата_возврата Дата) ОГРАНИЧЕНИЯ (Значения полей Ном_билета и Ном_переплета должны принадлежать набору значений соответствующих полей таблиц Читатели и Переплеты; при нарушении вывод сообщения "Такого читателя нет" или "Такого переплета нет");

Теперь следует проверить, не нарушены ли в данном прокете какие-либо принципы нормализации (п. 4.6), т.е. что любое неключевое поле каждой таблицы:

  • функционально зависит от полного первичного ключа, а не от его части (если ключ составной);
  • не имеет функциональной зависимости от другого неключевого поля.
  • Сущности Авторы, Составители, Редакторы, Художники и Переиздания, не имеющие неключевых полей, безусловно нормализованы. Нормализованы и сущности Создатели, Характеры, Заглавия, Вид_издания и Аннотации, состоящие из несоставного ключа и единственного неключевого поля.

Анализ сущностей Переводчики, Размещение и Выдача, состоящих из составного ключа и неключевых полей, показал, что в них нет функциональных связей между неключевыми полями. Последние же не зависят функционально от какой-либо части составного ключа.

Наконец, анализ сущностей Издания, Переплеты, Места, Читатели и Языки, показал, что единственной "подозрительной" сущностью является стержень Языки, имеющий два функционально связанных неключевых поля: Язык и Сокращение.

Поле Язык стало неключевым из-за ввода цифрового первичного ключа Код_языка, заменяющего текстовый возможный ключ Язык. Это позволило уменьшить объем хранимых данных в таблице Переводчики, затраты труда на ввод множества текстовых значений и возможной противоречивости, которая часто возникает из-за ввода в разные поля ошибочных дубликатов (например, "Английский", "Англиский", "Анлийский", "Англйский" и т.п.). Если мы вспомним рекомендации п. 4.5 о замене на время нормализации цифровыз заменителей первичных ключей (Код_языка) на исходный ключ (Язык) или воспользуемся формулировкой НФБК, то окажется, что таблица Языки - нормализована.

Для завершения проекта необходимо было бы ввести в описания таблиц дополнительные сведения об ограничениях целостности (выше указан лишь минимальный их набор) и дать описание некоторых таблиц, но ограниченнный объем публикации не позволяет включать эти подробности, не являющиеся принципиальными для иллюстрации процедуры проектирования.

ЛИТЕРАТУРА

  1. Атре Ш. Структурный подход к организации баз данных. - М.: Финансы и статистика, 1983. - 320 с.
  2. Бойко В.В., Савинков В.М. Проектирование баз данных информационных систем. - М.: Финансы и статистика, 1989. - 351 с.
  3. Дейт К. Руководство по реляционной СУБД DB2. - М.: Финансы и статистика, 1988. - 320 с.
  4. Джексон Г. Проектирование реляционных баз данных для использования с микроЭВМ. -М.: Мир, 1991. - 252 с.
  5. Кириллов В.В. Структуризованный язык запросов (SQL). - СПб.: ИТМО, 1994. - 80 с.
  6. Мартин Дж. Планирование развития автоматизированных систем. - М.: Финансы и статистика, 1984. - 196 с.
  7. Мейер М. Теория реляционных баз данных. - М.: Мир, 1987. - 608 с.
  8. Тиори Т., Фрай Дж. Проектирование структур баз данных. В 2 кн., - М.: Мир, 1985. Кн. 1. - 287 с.: Кн. 2. - 320 с.
  9. Ульман Дж. Базы данных на Паскале. - М.: Машиностроение, 1990. - 386 с.
  10. Хаббард Дж. Автоматизированное проектирование баз данных. - М.: Мир, 1984. - 294 с.
  11. Цикритизис Д., Лоховски Ф. Модели данных. - М.: Финансы и статистика, 1985. - 344 с.

 

ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ

Администратор базы данных (АБД) *
Аномалии:
включения *
обновления *
удаления *
Ассоциация *
Атомарное значение *
Атрибут *
База данных *
- - предметная *
- - прикладная *
- - реляционная *
Ведение данных *
Векторы *
Декомпозиция таблицы *
Домен *
ER-диаграммы *
Заголовок отношения *
Избыточность *
Ключ *
- внешний *
- возможный *
- первичный *
Кардинальное число отношения *
Кортеж *
Минимальность *
Многозначная зависимость *
Модель данных:
- - даталогическая *
- - инфологическая *
- - физическая *
Мощность отношения *
Независимость хранимых данных *
Нормализация *
Нормализованная таблица *
Нормальные формы *, *
NULL-значения *, *
Обозначение *
Отношение *
Поле *
Противоречивость *
Реляционная структура данных *
Связь *, *
Система управления базами данных (СУБД) *
Степень отношения *
Столбцы таблицы *, *
Строки таблицы *, *
Сущность *
- ассоциативная *
- обозначающая *
- стержневая *
- характеристическая *
Тело отношения *
Универсальное отношение *
Уникальность *
Функциональная зависимость *
Характеристика *
Целостность *
Цель *
Язык запросов по образцу (QBE) *
Язык инфологического моделирования (ЯИМ) *
Язык описания данных (ЯОД) *
Язык структурированных запросов (SQL) *
Язык "Таблица-связь" *


[*] Ведение (сопровождение, поддержка) данных - термин объединяющий действия по добавлению, удалению или изменению хранимых данных.



Поделиться:


Последнее изменение этой страницы: 2016-09-13; просмотров: 209; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 44.220.131.93 (0.018 с.)