Доклад: Пример проектирования базы данных Библиотека

21. Номер (инвентарный номер) переплета.

22. Дата приобретения конкретного переплета.

23. Цена конкретного переплета.

24. Дата размещения конкретного переплета на конкретном месте.

25. Дата изъятия переплета с установленного места.

26. Номер читательского билета (формуляра).

27. Фамилия читателя.

28. Имя читателя.

29. Отчество читателя.

30. Адрес читателя.

31. Телефон читателя.

32. Дата выдачи читателю конкретного переплета.

33. Срок, на который конкретный переплет выдан читателю.

34. Дата возврата переплета.

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

Анализ определенных выше объектов и атрибутов позволяет выделить сущности проектируемой базы данных и, приняв решение о создании реляционной базы данных, построить ее инфологическую модель на языке "Таблицы-связи" (рис. 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] (Номер_билета , Номер_переплета , Дата_выдачи, Срок, Дата_возврата).

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

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

Рис. 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 с.

К-во Просмотров: 400
Бесплатно скачать Доклад: Пример проектирования базы данных Библиотека