Учебная работа. Доклад: Пример проектирования базы данных Библиотека
Предназначение и предметная область
База данных создана для хранения данных о обретенных библиотекой изданиях (монографиях, справочниках, сборниках статей и т.п.), инфы о местонахождении отдельных экземпляров (переплетов) всякого издания и сведений о читателях.
Д27
Дейт К.
Управление по реляционной СУБД DB2 / Пер. с англ. и предисл. М.Р.Когаловского. – М.: деньги и статистика, 1988. – 320 с.: ил.
ISBN 5-279-00063-9
Книжка южноамериканского спеца в области реляционных баз данных К.Дейта, создателя пользующейся популярностью в СССР (Союз Советских Социалистических Республик, также Советский Союз — системы баз данных» (М.: Наука, 1981), представляет собой управление по многообещающей СУБД компании ИБМ DB2, сочетающей способности обширно известной системы IMS/VS и реляционной СУБД.
Для профессионалов по программному обеспечению информационных систем и студентов вузов.
ББК 32.973
Рис. 5.1. Макет аннотированной каталожной карточки
Для ведения библиотечных каталогов, организации поиска требуемых изданий и библиотечной статистики в базе должны храниться сведения, большая часть которых располагаются в аннотированных каталожных карточках (рис. 5.1). анализ запросов на литературу (как читателями, так и сотрудниками библиотек) указывает, что для поиска пригодных изданий (по теме, создателю, художнику, издательству и т.п.) и отбора подходящего (к примеру, по инструкции) следует выделить последующие атрибуты каталожной карточки:
1. Создатель (фамилия и имена (инициалы) либо псевдоним всякого создателя издания).
2. Заглавие (название) издания.
3. Номер тома (части, книжки, выпуска).
4. Вид издания (сборник, справочник, монография, …).
5. Составитель (фамилия и имена (инициалы) всякого из составителе издания).
6. язык, с которого выполнен перевод издания.
7. Переводчик (фамилия и инициалы всякого переводчика).
8. Под чей редакцией (фамилия и имена (инициалы) всякого из титульных редакторов).
9. Живописец (фамилия и имена (инициалы) всякого художника-иллюстратора) — для художественных изданий, иллюстрируемых уникальными рисунками.
10. Повторность издания (2-ое, одиннадцатое и т.п.).
11. нрав переиздания (исправленное, дополненное, переработанное, стереотипное и т.п.).
12. пространство издания (город).
13. Издательство (заглавие издательства).
14. Год выпуска издания.
15. Издательская инструкция либо реферат.
16. Библиотечный шифр (к примеру, ББК 32.973).
17. Авторский символ (к примеру, Д27).
Библиотечный шифр и авторский символ употребляются при составлении каталогов и организации расстановки изданий на полках: по содержанию (в согласовании с библиотечным шифром) и алфавиту (в согласовании с авторским знаком).
Библиотечно-библиографическая систематизация (ББК) распределяет издания по отраслям познания в согласовании с их содержанием. В ней употребляется цифро-буквенные индексы ступенчатой структуры.
Любой из 9 классов (1. Марксизм-ленинизм; 2. Естественные науки; 3. техника. Технические науки; 4. Сельское и лесное хозяйство; 5. Здравоохранение; 6/8. Публичные и гуманитарные науки; 9. Библиографические пособия. Справочные издания. Журнальчики.) делится на подклассы и последующие ступени деления:
3. техника. Технические науки.
32 Радиоэлектроника.
32.97 Вычислительная техника.
32.973 электрические вычислительные машинки и устройства.
32.973.2 Электронно вычислительные машинки и устройства дискретного деяния.
Шифр ББК употребляется при выделении хранимым изданиям определенных комнат, стеллажей и полок, также для составления каталогов и статистических отчетов.
Авторский символ, состоящий из первой буковкы фамилии (псевдонима) создателя либо наименования издания (для изданий без создателя) и числа, соответственного слогу, более приближающегося по написанию к первым буковкам фамилии (наименования), упрощает расстановку книжек на полках в алфавитном порядке.
К объектам и атрибутам, позволяющим охарактеризовать отдельные экземпляры изданий (переплеты), места их хранения и читателей, можно отнести:
18. Номер комнаты (помещения для хранения переплетов).
19. Номер стеллажа в комнате.
20. Номер полки на стеллаже.
21. Номер (инвентарный номер) переплета.
22. Дата приобретения определенного переплета.
23. Стоимость определенного переплета.
24. Дата размещения определенного переплета на определенном месте.
25. Дата изъятия переплета с установленного места.
26. Номер читательского билета (формуляра).
27. Фамилия читателя.
28. имя читателя.
29. Отчество читателя.
30. Адресок читателя.
31. телефон читателя.
32. Дата выдачи читателю определенного переплета.
33. Срок, на который определенный переплет выдан читателю.
34. Дата возврата переплета.
Построение инфологической модели
анализ определенных выше объектов и атрибутов дозволяет выделить сути проектируемой базы данных и, приняв решение о разработке реляционной базы данных, выстроить ее инфологическую модель на языке «Таблицы-связи» (рис. 5.2).
К стержневым сущностям можно отнести:
, Создатель).
Эта суть отводится для хранения сведений о главных людях, принимавших роль в подготовке рукописи издания (создателях, составителях, титульных редакторах, переводчиках и художниках). Такое объединение допустимо, потому что данные о различных создателях выбираются из 1-го домена (фамилия и имена) и исключает дублирование данных (один и этот же человек может играться различные роли в подготовке различных изданий). к примеру, С.Я.Маршак писал стихи (Притча о глуповатом мышонке) и пьесы (Двенадцать месяцев), переводил Дж.Байрона, Р.Бернса, Г.Гейне и составлял сборники стихов.
Потому что фамилия и имена (инициалы) создателя могут быть довольно массивными (М.Е. Салтыков-Щедрин, Франсуа Рене де Шатобриан, Остен Жюль Жан-Батист Ипполит и т.п.) и будут неоднократно встречаться в различных изданиях, то их целенаправлено нумеровать и ссылаться на эти номера. Для этого вводится целочисленный атрибут «Код_создателя», который будет автоматом наращиваться на единицу при вводе в базу данных новейшего создателя, переводчика либо другого создателя.
Аналогично создаются: Код_издательства, Код_заглавия, Вид_ издания, Код_характера, Код_языка, Номер_билета, Номер_пере- плета, Код_места и Код_издания, замещающие от 1-го до 9 атрибутов.
, Заглавие, город).
, Название).
Выделение данной сути дозволит уменьшить размер данных и понизить возможность появления противоречивости (исключается необходимость ввода длинноватых текстовых заглавий для разных томов собраний сочинений, повторных изданий, учебников и т.п.).
, Название_вида).
, нрав_переиздания).
, язык, Сокращение).
Не считая наименования языка хранится его принятое сокращение (англ., исп., нем., фр.), если оно существует.
, Номер_комнаты, Номер_стеллажа, Номер_ полки).
один из кодов данной сути (к примеру, «-1») отведен для описания обобщенного места, находящегося за стенками хранилища книжек (издание выдано читателю, временно передано иной библиотеке либо организации).
, Фамилия, имя, Отчество, Адресок, Телефон).
Две главные сути, описывающие издание и его определенные экземпляры, оказываются зависимыми от остальных сущностей и попадают в класс обозначений:
, Код_заглавия, Вид_издания, Номер_тома, Авторский_символ, Библиотечн_шифр, Повторность, Код_издательства, Год_издания, Инструкция) [Заглавия, Вид_издания, Издательства];
, Код_издания, Стоимость, Дата_приобретения)[Издания];
Стержневые сути и обозначения соединены меж собой ассоциациями:
, Код_издания
).
, Код_издания
).
, Код_издания
).
, Код_издания
).
, Код_издания
, язык).
, Код_издания
).
, Номер_переплета
, Дата_размещения, Дата_изъятия).
, Номер_переплета
, Дата_выдачи, Срок, Дата_возврата).
И, в конце концов, для уменьшения размера нередко применяемого обозначения «Издания» из него выделена черта:
Инструкции (Код_издания
, Инструкция) {Издание}.
Рис. 5.2. Инфологическая модель базы данных «библиотека«, построенная при помощи языка «Таблицы-связи»
Проектирование базы данных
В соответствие с процедурой проектирования (п. 4.4) любая из приобретенных сущностей обязана быть представлена базисной таблицей. 1-ый вариант этих таблиц описывается так:
СОЗДАТЬ ТАБЛИЦУ Создатели *( Стержневая суть ) ПЕРВИЧНЫЙ КЛЮЧ ( Код_создат ) ПОЛЯ ( Код_создат Целое, Фам_ИО текст 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 о подмене на время нормализации цифровыз заменителей первичных ключей (Код_языка) на начальный ключ (язык) либо воспользуемся формулировкой НФБК, то окажется, что таблица Языки – нормализована.
Для окончания проекта нужно было бы ввести в описания таблиц доп сведения о ограничениях целостности (выше указан только малый их набор) и отдать описание неких таблиц, но ограниченнный размер публикации не дозволяет включать эти подробности, не являющиеся принципными для иллюстрации процедуры проектирования.
ЛИТЕРАТУРА
]]>