Файл: Моделирование предметной области «Движение библиотечного фонда» с помощью UML.pdf
Добавлен: 25.04.2023
Просмотров: 274
Скачиваний: 2
СОДЕРЖАНИЕ
ГЛАВА 1 АНАЛИЗ ПОСТАВЛЕННОЙ ЗАДАЧИ
1.1 Определение основного направления
1.2 Порядок создания автоматизированной библиотечной системы
ГЛАВА 2 Практические аспекты модернизации предметной области
2.1 Проектирование базы данных
2.2 Построение инфологической модели
Так как фамилия и имена (инициалы) создателя могут быть достаточно громоздкими (М.Е. Салтыков-Щедрин, Франсуа Рене де Шатобриан, Остен Жюль Жан-Батист Ипполит и т.п.) и будут многократно встречаться в разных изданиях, то их целесообразно нумеровать и ссылаться на эти номера. Для этого вводится целочисленный атрибут "Код_создателя", который будет автоматически наращиваться на единицу при вводе в базу данных нового автора, переводчика или другого создателя.
Аналогично создаются: Код_издательства, Код_заглавия, Вид_ издания, Код_характера, Код_языка, Номер_билета, Номер_пере- плета, Код_места и Код_издания, замещающие от одного до девяти атрибутов.
- Издательства (Код_издательства, Название, Город).
- Заглавия(Код_заглавия,Заглавие).
Выделение этой сущности позволит сократить объем данных и снизить вероятность возникновения противоречивости (исключается необходимость ввода длинных текстовых названий для различных томов собраний сочинений, повторных изданий, учебников и т.п.).
- Вид_издания (Вид_издания, Название_вида).
- Характеры (Код_характера, Характер_переиздания).
- Языки (Код_языка, Язык, Сокращение).
Кроме названия языка хранится его общепринятое сокращение (англ., исп., нем., фр.), если оно существует. - Места (Код_места, Номер_комнаты, Номер_стеллажа, Номер_ полки).
Один из кодов этой сущности (например, "-1") отведен для описания обобщенного места, находящегося за стенами хранилища книг (издание выдано читателю, временно передано другой библиотеке или организации). - Читатели (Номер_билета, Фамилия, Имя, Отчество, Адрес, Телефон).
Две ключевые сущности, описывающие издание и его конкретные экземпляры, оказываются зависимыми от других сущностей и попадают в класс обозначений:
- Издание (Код_издания, Код_заглавия, Вид_издания, Номер_тома, Авторский_знак, Библиотечн_шифр, Повторность, Код_издательства, Год_издания, Аннотация) [Заглавия, Вид_издания, Издательства];
- Переплеты (Номер_переплета, Код_издания, Цена, Дата_приобретения)[Издания];
Стержневые сущности и обозначения связаны между собой ассоциациями:
- Авторы [Создатели M, Издание N] (Код_создателя, Код_издания).
- Составители [Создатели M, Издания N] (Код_создателя, Код_издания).
- Редакторы [Создатели M, Издания N] (Код_создателя, Код_издания).
- Художники [Создатели M, Издания N] (Код_создателя, Код_издания).
- Переводчики [Создатели M, Издания N] (Код_создателя, Код_издания, Язык).
- Переиздания [Характеры M, Издания N] (Код_характера, Код_издания).
- Размещение [Места M, Переплеты N] (Код_места, Номер_переплета, Дата_размещения, Дата_изъятия).
- Выдача [Читатели M, Переплеты N] (Номер_билета, Номер_переплета, Дата_выдачи, Срок, Дата_возврата).
И, наконец, для уменьшения объема часто используемого обозначения "Издания" из него выделена характеристика:
- Аннотации (Код_издания, Аннотация) {Издание}.
Рис. 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-значения НЕ ДОПУСТИМЫ
УДАЛЕНИЕ ИЗ Переплеты КАСКАДИРУЕТСЯ
ОБНОВЛЕНИЕ Переплеты.Ном_переплета КАСКАДИРУЕТСЯ)
ПОЛЯ ( Ном_билета Целое, Ном_переплета Целое, Дата_выдачи Дата,
Срок Целое, Дата_возврата Дата )
ОГРАНИЧЕНИЯ ( Значения полей Ном_билета и Ном_переплета должны
принадлежать набору значений соответствующих полей таблиц
Читатели и Переплеты; при нарушении вывод сообщения
"Такого читателя нет" или "Такого переплета нет" );
Теперь следует проверить, не нарушены ли в данном прокете какие-либо принципы нормализации, т.е. что любое неключевое поле каждой таблицы:
- функционально зависит от полного первичного ключа, а не от его части (если ключ составной);
- не имеет функциональной зависимости от другого неключевого поля.
- Сущности Авторы, Составители, Редакторы, Художники и Переиздания, не имеющие неключевых полей, безусловно нормализованы. Нормализованы и сущности Создатели, Характеры, Заглавия, Вид_издания и Аннотации, состоящие из несоставного ключа и единственного неключевого поля.
Анализ сущностей Переводчики, Размещение и Выдача, состоящих из составного ключа и неключевых полей, показал, что в них нет функциональных связей между неключевыми полями. Последние же не зависят функционально от какой-либо части составного ключа.
Наконец, анализ сущностей Издания, Переплеты, Места, Читатели и Языки, показал, что единственной "подозрительной" сущностью является стержень Языки, имеющий два функционально связанных неключевых поля: Язык и Сокращение.
Поле Язык стало неключевым из-за ввода цифрового первичного ключа Код_языка, заменяющего текстовый возможный ключ Язык. Это позволило уменьшить объем хранимых данных в таблице Переводчики, затраты труда на ввод множества текстовых значений и возможной противоречивости, которая часто возникает из-за ввода в разные поля ошибочных дубликатов (например, "Английский", "Англиский", "Анлийский", "Англйский" и т.п.). Если мы вспомним рекомендации о замене на время нормализации цифровыз заменителей первичных ключей (Код_языка) на исходный ключ (Язык) или воспользуемся формулировкой НФБК, то окажется, что таблица Языки – нормализована.
2.3 Проектирование с помощью UML
В процессе проектирования, рассматриваются все требования пользователей и в результате, поучим логическое решение задачи. На этом этапе, используем следующие диаграммы:
- Диаграмма вариантов использования ( use case diagram)
- Диаграмма последовательности (sequence diagram)
- Диаграмма классов (class diagram)
-Диаграммы активности (Activity diagram )
Данный вариант использования представлен на общей диаграмме, реализуется в компонентах «Работа с программой» и
состоит из:
• Создание новый читателей и добавление в Б.Д;
• Создание новую книгу и добавление в Б.Д;
• Создание новой зал и добавление в Б.Д;
• Смотреть список читатели.
• Смотреть список залов.
• Смотреть список книг.
• Изменение информации о читатели.
• Изменение информации о зале.
• Изменение информации о книге.
• Изменение информации о читатели.
• Поиск книг в каталоге на основании введенного шифра.
• Поиск книг в каталоге на основании названия книги.
• Регистрация взятых читателем книг.
• Получить информации, какие книги были выданы за данный промежуток времени.
• Получить информации, какие книги были возвращены за данный промежуток времени.