Приклад
проектування бази даних "Бібліотека"
Призначення та предметна область
База даних призначена для зберігання даних про придбані бібліотекою виданнях (монографіях, довідниках, збірниках статей і тому подібне), інформації про
місцезнаходження окремих екземплярів (переплутав) кожного видання і відомостей про читачів. p>
Д27
Дейт К. b> Посібник з реляційної СУБД DB2/Пер. з англ. і предисл. М. Р. Когаловского. - М.: Фінанси і статистика, 1988. - 320 с.: Ил.
ISBN 5-279-00063-9
Книга американського фахівця в області реляційних баз даних К. Дейта,
автора популярної в СРСР монографії "Введення в системи баз даних" (М.: Наука, 1981), являє собою посібник з перспективною СУБД фірми
ІБМ DB2, що поєднує можливості широко відомої системи IMS/VS і реляційної СУБД.
Для фахівців з програмного забезпечення інформаційних систем і студентів вузів.
ББК 32.973
Рис. 5.1. Макет анотованої каталожної картки h2>
Для ведення бібліотечних каталогів, організації пошуку необхідних видань та бібліотечної статистики в базі повинні зберігатися відомості, більша частина яких
розміщуються в анотованих каталожних картках (рис. 5.1). Аналіз запитів на літературу (як читачами, так і співробітниками бібліотек) показує, що
для пошуку відповідних видань (за тематикою, автору, художнику, видавництва тощо) та відбору потрібного (наприклад, за анотації) слід виділити наступні
атрибути каталожної картки: p>
1. Автор (прізвище та імена (ініціали) або псевдонім кожного автора видання). P>
2. Назва (заголовок) видання. P>
3. Номер тома (частини, книги, випуску). P>
4. Вид видання (збірник, довідник, монографія, ...). p>
5. Укладач (прізвище та імена (ініціали) кожного з укладачі видання). P>
6. Мова, з якого виконаний переклад видання. P>
7. Перекладач (прізвище та ініціали кожного перекладача). P>
8. Під чий редакцією (прізвище та імена (ініціали) кожного з титульних редакторів). P>
9. Художник (прізвище та імена (ініціали) кожного художника-ілюстратора) - для художніх видань, іллюстріруемих оригінальними малюнками. P>
10. Повторність видання (друге, одинадцятий і т.п.). P>
11. Характер перевидання (виправлене, доповнене, перероблене, стереотипне і т.п.). P>
12. Місце видання (місто). P>
13. Видавництво (назва видавництва). P>
14. Рік випуску видання. P>
15. Видавнича анотація або реферат. P>
16. Бібліотечний шифр (наприклад, ББК 32.973). P>
17. Авторський знак (наприклад, Д27). P>
Бібліотечний шифр і авторський знак використовуються при складанні каталогів та організації розстановки видань на полицях: за змістом (відповідно до
бібліотечним шифром) і алфавіту (у відповідності з авторським знаком). p>
Бібліотечно-бібліографічна класифікація (ББК) розподіляє видання за галузями знань у відповідності з їх змістом. У ній використовується
цифро-літерні індекси ступінчастою структури. p>
Кожен з дев'яти класів (1. Марксизм-ленінізм; 2. Природничі науки; 3. Техніка. Технічні науки; 4. Сільське та лісове господарство; 5. Охорона здоров'я;
6/8. Суспільні та гуманітарні науки; 9. Бібліографічні посібники. Довідкові видання. Журнали.) Ділиться на підкласи і наступні ступені ділення: p>
3. Техніка. Технічні науки.
32 Радіоелектроніка.
32.97 Обчислювальна техніка.
32.973 Електронні обчислювальні машини та пристрої.
32.973.2 Електронно обчислювальні машини й пристрої дискретної дії. P>
Шифр ББК використовується при виділенні що зберігається виданням певних кімнат, стелажів і полиць, а також для складання каталогів і статистичних звітів. p>
Авторський знак, що складається з першої літери прізвища (псевдонім) автора або назвою видання (для видань без автора) і числа, що відповідає склад,
найбільш наближається з написання до перших буквах прізвища (назви), спрощує розстановку книжок на полицях в алфавітному порядку. p>
До об'єктів і атрибутів, що дозволяє охарактеризувати окремі примірники видань (палітурки), місця їх зберігання і читачів, можна віднести: p>
18. Номер кімнати (приміщення для зберігання переплутав). P>
19. Номер стелажа в кімнаті. P>
20. Номер полки на стелажі. P>
21. Номер (інвентарний номер) палітурки. P>
22. Дата придбання конкретного палітурки. P>
23. Ціна конкретного палітурки. P>
24. Дата розміщення конкретного палітурки на конкретному місці. P>
25. Дата вилучення плетіння з встановленого місця. P>
26. Номер читацького квитка (формуляра). P>
27. Прізвище читача. P>
28. Назва читача. P>
29. По-батькові читача. P>
30. Адреса читача. P>
31. Телефон читача. P>
32. Дата видачі читачеві конкретного палітурки. P>
33. Термін, на який конкретний обкладинка виданий читачеві. P>
34. Дата повернення палітурки. P>
Побудова інфологіческой моделі
Аналіз визначених вище об'єктів і атрибутів дозволяє виділити суті проектованої бази даних і, прийнявши рішення про створення реляційної бази даних,
побудувати її інфологіческую модель на мові "Таблиці-зв'язку" (мал. 5.2). p>
До стрижневим сутностей можна віднести: p>
Творці (Код творця, Творець).
Ця сутність відводиться для зберігання відомостей про основні людях,
що брали участь у підготовці рукопису видання (авторів, упорядника,
титульних редакторів, перекладачів і художників). Таке об'єднання
допустимо, тому що дані про різних творців вибираються з одного домену
(прізвище та імена) і виключає дублювання даних (одна й та сама людина
може грати різні ролі у підготовці різних видань). Наприклад,
С. Я. Маршак писав вірші (Казка про дурному мишеня) та п'єси (Дванадцять
місяців), перекладав Дж.Байрона, Р. Бернса, Г. Гейне і становив збірники
віршів.
Так як прізвище та імена (ініціали) творця можуть бути досить
громіздкими (М. Є. Салтиков-Щедрін, Франсуа Рене де Шатобріан, Остен Жюль
Жан-Батист Іполит і т.п.) і будуть часто зустрічатися в різних
виданнях, то їх доцільно нумерувати і посилатися на ці номери. Для
цього вводиться цілочисельний атрибут "Код_создателя", який
буде автоматично нарощуватися на одиницю при введенні в базу даних нового
автора, перекладача або іншого творця.
Аналогічно створюються: Код_іздательства, Код_заглавія, Від_ видання,
Код_характера, Код_язика, Номер_білета, Номер_пере-плету, Код_места і
Код_ізданія, що заміщають від одного до дев'яти атрибутів.
Видавництва (Код_іздательства, Назва, Місто).
Заголовки (Код_заглавія, Заголовок).
Виділення цієї суті дозволить скоротити обсяг даних і знизити
ймовірність виникнення суперечливості (виключається необхідність
введення довгих текстових назв для різних томів зібрань творів,
повторних видань, підручників і т.п.).
Від_ізданія (Від_ізданія, Названіе_віда).
Характери (Код_характера, Характер_переізданія).
Мови (Код_язика, Мова, Скорочення).
Крім назви мови зберігається його загальноприйняте скорочення (англ., ісп.,
ньому., фр.), якщо вона існує.
Місця (Код_места, Номер_комнати, Номер_стеллажа, Номер_
полиці).
Один з кодів цієї сутності (наприклад, "-1") відведено для
опису узагальненого місця, що знаходиться за стінами сховища книг
(видання видано читачеві, тимчасово передано іншій бібліотеці або
організації).
Читачі (Номер_білета, Прізвище, Ім'я, По батькові, Адреса,
Телефон).
Дві ключові сутності, що описують видання і його конкретні екземпляри, виявляються залежними від інших сутностей і потрапляють в клас позначень: p>
Видання (Код_ізданія, Код_заглавія, Від_ізданія,
Номер_тома, Авторскій_знак, Бібліотечн_шіфр, Повторність,
Код_іздательства, Год_ізданія, Анотація) [Заголовки, Від_ізданія,
Видавництва];
Палітурки (Номер_переплета, Код_ізданія, Ціна,
Дата_пріобретенія) [Видання];
Стержневые суті та позначення пов'язані між собою асоціаціями: p>
Автори [Творці M, Видання N] (Код_создателя, Код_ізданія).
Укладачі [Творці M, Видання N] (Код_создателя, Код_ізданія).
Редактори [Творці M, Видання N] (Код_создателя, Код_ізданія).
Художники [Творці M, Видання N] (Код_создателя, Код_ізданія).
Перекладачі [Творці M, Видання N] (Код_создателя, Код_ізданія,
Мова).
Перевидання [Характери M, Видання N] (Код_характера, Код_ізданія).
Розміщення [Місця M, Палітурки N] (Код_места, Номер_переплета,
Дата_размещенія, Дата_із'ятія).
Видача [Читачі M, Палітурки N] (Номер_білета, Номер_переплета,
Дата_видачі, Термін, Дата_возврата).
І, нарешті, для зменшення обсягу часто використовуваного позначення "Видання" з нього виділена характеристика: p>
Анотації (Код_ізданія, Анотація) (Видання).
p>
Рис. 5.2. Інфологіческая модель бази даних "Бібліотека", побудована з допомогою мови
"Таблиці-зв'язку" h2>
Проектування бази даних
У відповідності до процедури проектування (п. 4.4)
кожна з отриманих сутностей повинна бути представлена базової таблиці. Перший варіант цих таблиць описується так: p>
Створити таблицю Творці * (Стрижнева сутність) ПЕРВИННИЙ КЛЮЧ (Код_создат) ПОЛЯ (Код_создат Ціле, Фам_ІО Текст 30); Створити таблицю Видавництва * (Стрижнева сутність) ПЕРВИННИЙ КЛЮЧ (Код_іздательства) ПОЛЯ (Код_іздательства Ціле, Назва Текст 40, Місто Текст 25); Створити таблицю Заголовки * (Стрижнева сутність) ПЕРВИННИЙ КЛЮЧ (Код_заглавія) ПОЛЯ (Код_заглавія Ціле, Заголовок Запис); Створити таблицю Від_ізданія * (Стрижнева сутність) ПЕРВИННИЙ КЛЮЧ (Від_ізданія) ПОЛЯ (Від_ізданія Ціле, Названіе_віда Текст 16); Створити таблицю Характери * ( Стрижнева сутність) ПЕРВИННИЙ КЛЮЧ (Код_характера) ПОЛЯ (Код_характера Ціле, Характер_переізданія Текст 16); Створити таблицю Мови * (Стрижнева сутність) ПЕРВИННИЙ КЛЮЧ (Код_язика) ПОЛЯ (Код_язика Ціле, Мова Текст 16, Скорочення Текст 6); СТВОРИТИ таблиці місць * ( Стрижнева сутність) ПЕРВИННИЙ КЛЮЧ (Код_места) ПОЛЯ (Код_места Ціле, Номер_комнати Ціле, Номер_стелажа Ціле, Номер_полкі Ціле); Створити таблицю Читачі * (Стрижнева сутність) ПЕРВИННИЙ КЛЮЧ (Ном_білета) ПОЛЯ (Ном_білета Ціле, Прізвище Текст 20, Ім'я Текст 16, По батькові Текст 20, Адреса Текст 60, Телефон Текст 9); Створити таблицю Видання * (Позначення) ПЕРВИННИЙ КЛЮЧ (Код_ізданія) ЗОВНІШНІЙ КЛЮЧ (Код_заглавія З Заголовки NULL-значення Не допустимо ВИДАЛЕННЯ З Заголовки ОБМЕЖУЄТЬСЯ ОНОВЛЕННЯ Заглавія.Код_заглавія ОБМЕЖУЄТЬСЯ) ЗОВНІШНІЙ КЛЮЧ (Від_ізданія З Від_ізданія NULL-значення припустимі ВИДАЛЕННЯ З Від_ізданія ОБМЕЖУЄТЬСЯ ОНОВЛЕННЯ Від_ізданія.Від_ізданія КАСКАДІРУЕТСЯ) ЗОВНІШНІЙ КЛЮЧ (Код_іздательства З Видавництва NULL-значення Не допустимо ВИДАЛЕННЯ З Видавництва ОБМЕЖУЄТЬСЯ ОНОВЛЕННЯ Іздательства.Код_іздательства КАСКАДІРУЕТСЯ) ПОЛЯ (Код_ізданія Ціле, Код_заглавія Ціле, Від_ізданія Текст 16, Номер_тома Ціле , Авторскій_знак Текст 3, Бібліотечн_шіфр Текст 12, Повторність Ціле, Код_іздательст-ва Ціле, Год_ізданія Ціле) ОБМЕЖЕННЯ (1. Значення полів Код_заглавія, Від_ізданія і Код_іздательства повинні належати набору значень відповідних полів таблиць Заголовки, Від_ізданія і Видавництва; при порушенні висновок повідомлення "Такого заголовку немає "," Такого виду видання немає "або" Такого видавництва немає ".); Створити таблицю Палітурки * (Позначення) ПЕРВИННИЙ КЛЮЧ (Номер_переплета) ЗОВНІШНІЙ КЛЮЧ (Код_ізданія З Видання NULL-значення Не допустимо ВИДАЛЕННЯ З Видання ОБМЕЖУЄТЬСЯ ОНОВЛЕННЯ Ізданія.Код_ізданія КАСКАДІРУЕТСЯ) ПОЛЯ (Номер_переплета Ціле, Код_ізданія Ціле, Ціна Гроші, Дата_пріобретенія Дата) ОБМЕЖЕННЯ (Значення поля Код_ізданія повинні належати набору значень відповідного поля таблиці Видання; при порушенні висновок повідомлення "Такого видання немає"); Створити таблицю Анотації * (Характеризує Видання) ПЕРВИННИЙ КЛЮЧ (Код_ізданія) ЗОВНІШНІЙ КЛЮЧ (Код_ізданія З Видання NULL-значення припустимі ВИДАЛЕННЯ З Видання ОБМЕЖУЄТЬСЯ ОНОВЛЕННЯ Ізданія.Код_ізданія КАСКАДІРУЕТСЯ) ПОЛЯ (Код_ізданія Ціле, Анотація Запис) ОБМЕЖЕННЯ (Значення поля Код_ізданія повинні належати набору значень відповідного поля таблиці Видання; при порушенні висновок повідомлення "Такого видання немає"); Створити таблицю Автори * (Зв'язує Творці і Видання) ПЕРВИННИЙ КЛЮЧ (Код_создателя, Код_ізданія) ЗОВНІШНІЙ КЛЮЧ (Код_создателя З Творці NULL-значення Не допустимо ВИДАЛЕННЯ З Творці ОБМЕЖУЄТЬСЯ ОНОВЛЕННЯ Создателі.Код_создателя КАСКАДІРУЕТСЯ) ЗОВНІШНІЙ КЛЮЧ (Код_ізданія З Видання NULL-значення Не допустимо ВИДАЛЕННЯ З Видання ОБМЕЖУЄТЬСЯ ОНОВЛЕННЯ Ізданія.Код_ізданія КАСКАДІРУЕТСЯ) ПОЛЯ (Код_создателя Ціле, Код_ізданія Ціле) ОБМЕЖЕННЯ (Значення полів Код_создателя і Код_ізданія повинні належати набору значень відповідних полів таблиць Творці і Видання; при порушенні висновок повідомлення "Такого автора немає "або" Такого видання немає ");
Аналогічне зміст мають опису таблиць Укладачі, Редактори, Художники і Перевидання. Інші ж таблиці проектованої бази даних
описуються так: p>
Створити таблицю Перекладачі * (Зв'язує Творці, Видання та Мови) ПЕРВИННИЙ КЛЮЧ (Код_создателя, Код_ізданія) ЗОВНІШНІЙ КЛЮЧ (Код_создателя З Творці NULL-значення Не допустимо ВИДАЛЕННЯ З Творці ОБМЕЖУЄТЬСЯ ОНОВЛЕННЯ Создателі.Код_создателя КАСКАДІРУЕТСЯ) ЗОВНІШНІЙ КЛЮЧ (Код_ізданія З Видання NULL-значення НЕ Припустиме видалення З Видання ОБМЕЖУЄТЬСЯ ОНОВЛЕННЯ Ізданія.Код_ізданія КАСКАДІРУЕТСЯ) ЗОВНІШНІЙ КЛЮЧ (Код_язика З Мови NULL-значення Не допустимо ВИДАЛЕННЯ З Мови ОБМЕЖУЄТЬСЯ ОНОВЛЕННЯ Язикі.Код_язика КАСКАДІРУЕТСЯ) ПОЛЯ (Код_создателя Ціле, Код_ізданія Ціле) ОБМЕЖЕННЯ (Значення полів Код_создателя, Код_ізданія і Код_язика повинні належати набору значень відповідних полів таблиць Творці, Видання та Мови; при порушенні висновок повідомлення "Такого автора немає" або "Такого видання немає" або "Такого мови немає"); СТВОРИТИ Таблиця розміщення * (Зв'язує Місця та Палітурки) ПЕРВИННИЙ КЛЮЧ (Код_места, Номер_переплета) ЗОВНІШНІЙ КЛЮЧ (Код_места З Місця NULL-значення Не допустимо ВИДАЛЕННЯ З Місця ОБМЕЖУЄТЬСЯ ОНОВЛЕННЯ Места.Код_места КАСКАДІРУЕТСЯ) ЗОВНІШНІЙ КЛЮЧ (Номер_переплета З Палітурки NULL-значення Не допустимо ВИДАЛЕННЯ З Палітурки КАСКАДІРУЕТСЯ ОНОВЛЕННЯ Переплети.Ном_переплета КАСКАДІРУЕТСЯ) ПОЛЯ (Код_места Ціле, Номер_переплета Ціле, Дата_размещенія Дата, Дата_із'ятія Дата) ОБМЕЖЕННЯ (Значення полів Код_места і Номер_переплета повинні належати набору значень відповідних полів таблиць Палітурки і Місця; при порушенні висновок повідомлення "Такого палітурки немає" або "Такого місця немає"); Створити таблицю Видача * (Зв'язує Читачі і Палітурки) ПЕРВИННИЙ КЛЮЧ (Ном_білета, Ном_переплета) ЗОВНІШНІЙ КЛЮЧ (Ном_білета З Читачі NULL-значення Не допустимо ВИДАЛЕННЯ З Читачі КАСКАДІРУЕТСЯ ОНОВЛЕННЯ Чітателі.Ном_білета КАСКАДІРУЕТСЯ) ЗОВНІШНІЙ КЛЮЧ (Ном_переплета З Палітурки NULL-значення Не допустимо ВИДАЛЕННЯ З Палітурки КАСКАДІРУЕТСЯ ОНОВЛЕННЯ Переплети.Ном_переплета КАСКАДІРУЕТСЯ) ПОЛЯ (Ном_білета Ціле, Ном_переплета Ціле, Дата_видачі Дата,?? Термін Ціле, Дата_возврата Дата) ОБМЕЖЕННЯ (Значення полів Ном_білета і Ном_переплета повинні належати набору значень відповідних полів таблиць Читачі і Палітурки; при порушенні висновок повідомлення "Такого читача немає" або "Такого палітурки немає");
Тепер слід перевірити, чи не порушені в даному прокете будь-які принципи нормалізації (п. 4.6),
тобто що будь-яке неключових поле кожної таблиці: p>
функціонально залежить від повного первинного ключа, а не від його
частини (якщо ключ складовою);
не має функціональної залежності від іншого неключових поля.
Сутності Автори, Укладачі, Редактори, Художники і Перевидання,
що не мають неключових полів, безумовно нормалізовані. Нормалізувалася і
суті Творці, розмір, Заголовки, Від_ізданія і Анотації,
складаються з несоставного ключа і єдиного неключових поля.
Аналіз сутностей Перекладачі, Розміщення і Видача, що складаються з складного ключа і неключових полів, показав, що в них немає функціональних зв'язків між
неключових полями. Останні ж не залежать функціонально від будь-якої частини складного ключа. P>
Нарешті, аналіз сутностей Видання, Палітурки, Місця, Читачі і мови, показав, що єдиною "підозрілою" сутністю є
стрижень Мови, що має два функціонально пов'язаних неключових поля: Мова і Скорочення. p>
Поле Мова стало неключових через введення цифрового первинного ключа Код_язика, що заміняє текстовий можливий ключ Мова. Це дало змогу зменшити обсяг
збережених даних в таблиці Перекладачі, витрати праці на введення безлічі текстових значень і можливої суперечливості, яка часто виникає через
введення в різні поля помилкових дублікатів (наприклад, "Англійська", "Англиский", "Анлійскій", "Англйскій" і т.п.).
Якщо ми згадаємо рекомендації п. 4.5
про заміну на час нормалізації ціфровиз замінників первинних ключів (Код_язика) на вихідний ключ (Мова) або скористаємося формулюванням НФБК, то
виявиться, що таблиця Мови - нормалізована. p>
Для завершення проекту необхідно було б ввести в опису таблиць додаткові відомості про обмеження цілісності (вище вказаний лише
мінімальний їх набір) і дати опис деяких таблиць, але ограніченнний обсяг публікації не дозволяє включати ці подробиці, які не є принциповими
для ілюстрації процедури проектування. p>
ЛІТЕРАТУРА
Атре Ш. Структурний підхід до організації баз даних. - М.: Фінанси
і статистика, 1983. - 320 с.
Бойко В.В., Савінков В.М. Проектування баз даних інформаційних
систем. - М.: Фінанси і статистика, 1989. - 351 с.
Дейт К. Посібник з реляційної СУБД DB2. - М.: Фінанси і
статистика, 1988. - 320 с.
Джексон Г. Проектування реляційних баз даних для використання
з мікроЕОМ. -М.: Світ, 1991. - 252 с.
Кириллов В.В. Структурізованний мову запитів (SQL). - СПб.: ИТМО,
1994. - 80 с.
Мартін Дж. Планування розвитку автоматизованих систем. - М.:
Фінанси і статистика, 1984. - 196 с.
Мейер М. Теорія реляційних баз даних. - М.: Світ, 1987. - 608 с.
Тіорі Т., Фрай Дж. Проектування структур баз даних. У 2 кн., --
М.: Світ, 1985. Кн. 1. - 287 с.: Кн. 2. - 320 с.
Ульман Дж. Бази даних на Паскалі. - М.: Машиностроение, 1990. --
386 с.
Хаббард Дж. Автоматизоване проектування баз даних. - М.:
Світ, 1984. - 294 с.
Цікрітізіс Д., Лоховскі Ф. Моделі даних. - М.: Фінанси і
статистика, 1985. - 344 с.