Введение
Проектирование надежной и эффективной системы базы данных является критически важным этапом при разработке системы управления библиотекой. Этот процесс включает несколько этапов, начиная с проектирования диаграммы сущность-связь (ERD), за которым следует нормализация, и, наконец, создание схемы базы данных. В этой статье мы пройдем по каждому из этих этапов, продемонстрировав, как преобразовать концепцию в хорошо структурированную и оптимизированную базу данных библиотечной системы.
Процесс моделирования данных от ERD, нормализации и схемы базы данных
- Диаграмма сущность-связь (ERD)
Первым шагом при проектировании базы данных библиотечной системы является создание диаграммы сущность-связь (ERD). ERD — это визуальное представление сущностей данных и их взаимосвязей в системе. Рассмотрим некоторые ключевые компоненты:
a. Сущности: определите основные сущности в вашей библиотечной системе. К ним могут относиться книги, авторы, читатели, персонал и операции.
b. Атрибуты: для каждой сущности определите атрибуты или свойства. Например, сущность «Книга» может иметь атрибуты, такие как ISBN, название, автор, дата публикации и т.д.
c. Связи: определите отношения между сущностями. Например, сущность «Читатель» может иметь связь «Взять в прокат» с сущностью «Книга», чтобы отразить процесс взятия книг на прокат.
d. Мощность: укажите мощность связей, показывая, сколько экземпляров одной сущности связаны с другой. Например, один читатель может взять на прокат несколько книг, но каждая книга может быть взята на прокат только одним читателем одновременно.
- Нормализация
Нормализация — это процесс организации данных в базе данных с целью устранения избыточности и повышения целостности данных. Цель состоит в минимизации дублирования данных и обеспечении хранения каждой единицы информации в наиболее подходящем месте. Рассмотрим шаги, участвующие в нормализации базы данных библиотечной системы:
a. Определение функциональных зависимостей: проанализируйте атрибуты в ваших сущностях и определите, какие атрибуты зависят от других. Например, в сущности «Книга» имя автора зависит от ISBN книги.
b. Применение правил нормализации: используйте правила нормализации (например, первая нормальная форма, вторая нормальная форма, третья нормальная форма), чтобы разбить сложные сущности на более простые и создать отдельные таблицы для связанных данных.
c. Создание связей: устанавливайте связи между нормализованными таблицами с помощью первичных и внешних ключей для поддержания целостности данных.
d. Устранение избыточности: убедитесь, что каждая единица данных хранится только в одном месте. Например, информация об авторе должна храниться в отдельной таблице «Авторы», а не дублироваться в каждой записи книги.
- Схема базы данных
После того как ваша база данных полностью нормализована, вы можете перейти к созданию схемы базы данных. Схема определяет структуру базы данных, включая таблицы, столбцы, типы данных и ограничения. Рассмотрим шаги по созданию схемы базы данных для библиотечной системы:
a. Определение таблиц: создайте таблицы на основе сущностей, выявленных на диаграмме ERD и нормализованных данных. Каждая таблица должна представлять конкретную сущность (например, «Книги», «Авторы», «Читатели»).
b. Определение столбцов: укажите столбцы для каждой таблицы, представляя атрибуты, выявленные на диаграмме ERD. Убедитесь, что типы данных и ограничения (например, первичные ключи, внешние ключи, уникальные ограничения) определены правильно.
c. Установление связей: используйте внешние ключи для установления связей между таблицами, связывая связанные данные. Например, таблица «Книги» может иметь внешний ключ, указывающий на таблицу «Авторы».
d. Индексация: реализуйте индексацию по столбцам, часто используемым для поиска, чтобы улучшить производительность запросов.
Кейс-стади: библиотечная система
Диаграмма сущность-связь
Мы определили четыре таблицы: Авторы, Книги, Читатели и Операции. Вот что представляет каждая таблица:
- Авторы: содержит информацию об авторах книг. Имеет AuthorID как первичный ключ и атрибут Name.
- Книги: представляет подробности о книгах. Включает ISBN (первичный ключ), название, дату публикации и AuthorID как внешний ключ, ссылающийся на таблицу Авторы, чтобы установить связь между книгами и авторами.
- Читатели: хранит информацию о читателях библиотеки. Имеет PatronID как первичный ключ и атрибут Name.
- Операции: эта таблица фиксирует операции, когда читатели берут книги на прокат. Включает TransactionID (первичный ключ), BookID (внешний ключ, ссылающийся на таблицу Книги), PatronID (внешний ключ, ссылающийся на таблицу Читатели) и DueDate.
Связи между этими таблицами представлены следующим образом:
- Авторы и книги связаны между собой отношением один ко многим, что означает, что один автор может написать несколько книг.
- Книги и операции связаны между собой, что отражает тот факт, что каждая книга может входить в несколько операций, но каждая операция относится только к одной книге.
- Читатели и операции связаны между собой, что означает, что каждый читатель может иметь несколько операций, но каждая операция относится только к одному читателю.
Процесс нормализации
Давайте пройдемся по процессу нормализации для базы данных нашей библиотечной системы с использованием таблиц. Мы начнем с начального набора таблиц и постепенно нормализуем их через первую нормальную форму (1NF), вторую нормальную форму (2NF) и третью нормальную форму (3NF).
Исходные таблицы:
- Книги
- ISBN (PK)
- Название
- Дата публикации
- AuthorID (FK)
- Авторы
- AuthorID (PK)
- Имя
- Читатели
- PatronID (PK)
- Имя
- Операции
- TransactionID (PK)
- BookID (FK)
- PatronID (FK)
- Дата возврата
Первая нормальная форма (1NF):
В первой нормальной форме каждая таблица должна иметь первичный ключ, и в любом столбце не должно быть повторяющихся групп или массивов. Наши исходные таблицы уже соответствуют 1NF, поскольку у них есть первичные ключи, и каждая ячейка содержит одно значение.
Вторая нормальная форма (2NF):
Чтобы достичь 2NF, необходимо убедиться, что неполевые атрибуты зависят от всего первичного ключа. В наших исходных таблицах в таблице Books присутствует частичная зависимость, поскольку Title и PublicationDate зависят только от ISBN, а не от всего первичного ключа. Мы разделим таблицу Books на две таблицы:
Книги (2NF):
- ISBN (PK)
- AuthorID (FK)
Сведения о книге (2NF):
- ISBN (внешний ключ)
- Название
- Дата публикации
Теперь каждый столбец зависит от всего первичного ключа.
Третья нормальная форма (3NF):
В 3NF мы устраняем транзитивные зависимости. В таблице Patrons нет транзитивных зависимостей, но в таблице Transactions есть транзитивная зависимость от Books через BookID. Чтобы устранить эту зависимость, мы создадим новую таблицу для транзакций:
Транзакции (3NF):
- TransactionID (первичный ключ)
- PatronID (внешний ключ)
- Дата возврата
Взятые книги (3NF):
- TransactionID (внешний ключ)
- BookID (внешний ключ)
Теперь таблица Transactions зависит только от PatronID, а таблица BorrowedBooks управляет связью между транзакциями и книгами.
Наши нормализованные таблицы в 3NF следующие:
Книги (3NF):
- ISBN (первичный ключ)
- AuthorID (внешний ключ)
Сведения о книге (3NF):
- ISBN (внешний ключ)
- Название
- Дата публикации
Авторы (3NF):
- AuthorID (первичный ключ)
- Имя
Читатели (3NF):
- PatronID (первичный ключ)
- Имя
Транзакции (3NF):
- TransactionID (первичный ключ)
- PatronID (ВН)
- Дата возврата
Книги, взятые в аренду (3НФ):
- TransactionID (ВН)
- BookID (ВН)
Следуя процессу нормализации до 3НФ, мы улучшили целостность данных, сократили избыточность и устранили нежелательные зависимости, что привело к хорошо структурированной и нормализованной базе данных библиотечной системы.
Схема базы данных
— Таблица для авторов
СОЗДАТЬ ТАБЛИЦУ Authors (
AuthorID INT КЛЮЧ ОСНОВНОЙ,
Name VARCHAR(255)
);
— Таблица для книг
СОЗДАТЬ ТАБЛИЦУ Books (
ISBN VARCHAR(13) КЛЮЧ ОСНОВНОЙ,
AuthorID INT,
ВНЕШНИЙ КЛЮЧ (AuthorID) ССЫЛКА Authors(AuthorID)
);
— Таблица для сведений о книгах
СОЗДАТЬ ТАБЛИЦУ BookDetails (
ISBN VARCHAR(13),
Title VARCHAR(255),
Дата публикации DATE,
ВНЕШНИЙ КЛЮЧ (ISBN) ССЫЛКА Books(ISBN)
);
— Таблица для читателей
СОЗДАТЬ ТАБЛИЦУ Patrons (
PatronID INT КЛЮЧ ОСНОВНОЙ,
Name VARCHAR(255)
);
— Таблица для транзакций
СОЗДАТЬ ТАБЛИЦУ Transactions (
TransactionID INT КЛЮЧ ОСНОВНОЙ,
PatronID INT,
DueDate DATE,
ВНЕШНИЙ КЛЮЧ (PatronID) ССЫЛКА Patrons(PatronID)
);
— Таблица для BorrowedBooks (для представления отношения многие-ко-многим между Transactions и Books)
СОЗДАТЬ ТАБЛИЦУ BorrowedBooks (
TransactionID INT,
ISBN VARCHAR(13),
ВНЕШНИЙ КЛЮЧ (TransactionID) ССЫЛКА Transactions(TransactionID),
ВНЕШНИЙ КЛЮЧ (ISBN) ССЫЛКА Books(ISBN)
);
Заключение
Проектирование базы данных для системы управления библиотекой — сложная, но необходимая задача. Начав с диаграммы ERD, нормализовав данные и затем создав хорошо структурированную схему базы данных, можно обеспечить целостность данных, сократить избыточность и оптимизировать производительность базы данных. Этот структурированный подход закладывает основу надежной и эффективной системы библиотеки, которая может эффективно управлять книгами, авторами, читателями и транзакциями.










