ПЕРВОЕ ВЫСШЕЕ ТЕХНИЧЕСКОЕ УЧЕБНОЕ ЗАВЕДЕНИЕ РОССИИ
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
«НАЦИОНАЛЬНЫЙ МИНЕРАЛЬНО-СЫРЬЕВОЙ УНИВЕРСИТЕТ «ГОРНЫЙ»
Кафедра информационных систем и вычислительной техники
ЗАДАНИЕ
на курсовой проект по дисциплине
“Управление данными”
студент Тарасова Светлана Сергеевна 0403011001 (фамилия, имя, отчество) (шифр)
Тема курсового проекта
Разработка базы данных для библиотеки
Специальность (указать необходимую): 230201.65
Задание выдано "___" _______ 2012 г.
Срок представления проекта для проверки "____" _______ 2012 г.
Студент _________________
(подпись)
Руководитель проекта ________________
(подпись)
Санкт-Петербург
2012
1. Техническое задание
Разработать базу данных для общественной библиотеки. Пользователи: сотрудники библиотеки. База должна отражать информацию:
-
о библиотеке;
-
о книгах;
-
о читателях;
Требуется разработать интерфейс с использованием веб-технологий. Пользователь может искать, добавлять и редактировать информацию о книгах и читателях, а также вести учет выдачи/возврата книг.
2. Описание СУБД
-
В курсовом проекте используется комплект программ Denwer версии 3. Комплект состоит из следующих компонентов:
-
1) веб-сервер Apache 2
-
2) PHP5
-
3) СУБД MySQL 5
-
Основные преимущества MySQL:
-
1) многопоточность, поддержка нескольких одновременных запросов;
-
2) оптимизация связей с присоединением многих данных за один проход;
-
3) записи фиксированной и переменной длины;
-
4) ODBC драйвер;
-
5) гибкая система привилегий и паролей;
-
6) гибкая поддержка форматов чисел, строк переменной длины и меток времени;
-
7) интерфейс с языками C и Perl, PHP;
-
8) быстрая работа, масштабируемость;
-
9) совместимость с ANSI SQL;
-
10) бесплатна в большинстве случаев;
-
11) хорошая поддержка со стороны провайдеров услуг хостинга;
-
12) быстрая поддержка транзакций через механизм InnoDB.
-
Для разработки интерфейса был выбран входящий в Denwer язык PHP.
3. Инфологическая модель
3. 1 Описание предметной области
В библиотеке хранятся книги, записаны читатели. У книги может быть несколько авторов. Читатель может иметь на руках не более 5 книг. Срок возврата книги – 20 дней, возможно продление на тот же срок неограниченное количество раз.
3.2 Инфологическая схема объектов и связей
При разработке инфологической модели использованы элементы фреймового подхода к проектированию.
Рис. 3.1 Инфологическая модель
Использованы обозначения:
S – основная часть(вершина) фрейма
V – внутреннее собственное многозначное свойство объекта
Q – связь посредством сложного Q-классификатора. Наследование атрибутов из другой части
F – фрейм
X1…X8 – атрибуты (поля)
Фрагмент предметной области разделен на 3 фрейма:
-
F0 S Библиотека
F0 V1 Книги
F0 V2 Читатели
F0 V3 Связь между читателями и книгами
-
F1 S Книга
F1 V1 Авторы
-
F2 S Люди.
3.3 Ограничения предметной области
Библиотека. Информация вносится на этапе внедрения, не изменяется пользователем. В данном проекте рассматривается одна библиотека «Районная библиотека №6».
Книги. Вручную заносится уникальный код книги isbn. Не может быть изменена или удалена, если взята читателем. Книга может иметь одного или нескольких авторов.
Авторы. ФИО автора добавляется в базу при добавлении книги при отсутствии совпадений, записи автоматически присваивается уникальный номер. Автор не удаляется пользователем и может не иметь книг.
Читатели. При добавлении присваивается уникальный номер. Не может быть удален, если на руках хотя бы одна книга.
Люди. Вводится уникальный номер паспорта. Удаление при наличии соответствующего читателя невозможно.
-
Основные операции в данном фрагменте предметной области
-
Работа с книгами
- добавление
- поиск
- запись книги на читателя
- редактирование
- удаление
-
Работа с читателями
- добавление
- поиск
- редактирование
- управление книгами на руках
- удаление
4. Концептуальная модель
Ограничения предметной области в концептуальной модели
При описании ограничений используются функциональные зависимости. Если описать ограничение при помощи функциональной зависимости невозможно, то используется механизм ограничения целостности (внешний ключ) или создается триггер.
Атрибут х1 – идентификатор библиотеки.
Атрибут x2 – название библиотеки.
Х3 – идентификатор книги. Уникальный для данной предметной области номер книги и формируется системой автоматически (auto increment).
X4 – isbn книги. Уникальный 11-значный код, указанный на каждой книге.
Х5 - идентификатор читателя. Уникальный для данной предметной области номер читателя и формируется системой автоматически (auto increment).
Х6 - идентификатор человека. Уникальный для данной предметной области номер человека и формируется системой автоматически (auto increment).
X7 – номер и серия паспорта человека. Уникальный 10-значный код человека.
Х8 - идентификатор автора. Уникальный для данной предметной области номер автора и формируется системой автоматически (auto increment).
Триггеры
Триггер - программа базы данных, вызываемая всякий раз при вставке, изменении или удалении строки таблицы.
Триггер «b_ins_readbook»(см. п.3)
До создания новой записи в таблице Readbook обновляет поля в двух таблицах:
в таблице Readers(читатели) увеличивает столбец Количество книг на 1,
в табл. Book(книга) изменяет статус с 0 на 1(книга взята).
Триггер «b_del_readbook»(см. п.3)
До удаления записи в табл. Readbook обновляет те же поля, что и триггер «b_ins_readbook». Но уменьшает количество книг на 1 и изменяет статус книги с 1 на 0 (сдана в библиотеку).
5. Внешняя модель
Интерфейс создан с использованием html и php.
Требования к системе:
-
Ввод информации о книгах и людях
-
Изменение введенной информации
-
Поиск книг и читателей
-
Запись книг на читателя
-
Удаление книг и людей
Основные страницы:
-
Главная страница – информация о библиотеке index.php
-
Книги books.php
-
Читатели: readers.php
-
Физические лица: people.php
-
Общий интерфейс вынесен в файл menu.php, подключение к базе - connect.php.
Главная страница – index.php. Выдает из базы информацию о библиотеке.
Рис. 5.1 Главная страница
Читатели – readers.php. Возможные действия: открыть список книг, подробная информация, редактировать, удалить.
Рис. 5.2 Страница читатели
Посмотрим подробную информацию о читателе под номером 2.
Рис. 5.3 Открыта подробная информация о читателе
Как и из общего окна читателей можно посмотреть список книг, отредактировать или удалить читателя.
Рис. 5.4 Открыт список книг читателя
Информацию о книгах получаем методом GET, передавая переменную номер читателя id_r в адресной строке.
Рис. 5.5 Форма редактирования читателя
Чтобы добавить нового читателя, человек должен быть внесен в справочник Физические лица. В окне добавления нового читателя выводится список физических лиц без группы
Рис. 5.6 Окно добавления читателя
Рис. 5.7 Справочник Физические лица
6. Физическая модель
Ссылочная целостность обеспечивается механизмом внешних ключей. Данный механизм поддерживается только типом таблиц InnoDB.
Основные особенности:
- В отличие от MyISAM, таблицы для InnoDB не создаются в отдельных файлах. Все таблицы хранятся в едином табличном пространстве.
- Хранение данных в едином табличном пространстве позволяет снять ограничение на объем таблиц, так как файл с таблицами может быть разбит на несколько частей и распределен по нескольким дискам.
- Данный тип таблиц поддерживает автоматическое восстановление после сбоя.
- Обеспечивается поддержка транзакций.
- Это единственный тип таблиц MySQL, поддерживающий внешние ключи и каскадное удаление.
- Выполение блокировок на уровне отдельных записей.
- Таблицы InnoDB надежнее MyISAM, но заметно уступают в скорости работы и не поддерживают полнотекстовый поиск.
Список использованной литературы
-
Базы данных : инфологические модели баз данных: учеб. пособие/ М. В. Копейкин, В. В. Спиридонов, Е. О. Шумова. - СПб.: Изд-во СЗТУ, 2004. - 189 с.
-
Базы данных: учебно-методический комплекс /сост.: М.В. Копейкин, В.В. Спиридонов, Е.О. Шумова. - СПб.: Изд-во СЗТУ, 2010. – 175 с.
-
Копейкин М.В., Спиридонов В.В., Шумова Е.О. Базы данных: учебное
пособие: в 2 кн. Кн. 1. – СПб.: Изд-во СЗТУ, 2010. – 247.
-
Копейкин М.В., Спиридонов В.В., Шумова Е.О. Базы данных: учебное
пособие: в 2 кн. Кн. 2. – СПб.: Изд-во СЗТУ, 2010. – 219 c.
-
Кузнецов М. В., Симдянов И.В. MySql 5 – СПб: БХВ-Петербург, 2010 – 1024с.
Приложение 1
Описание таблиц и ограничений базы данных
-- phpMyAdmin SQL Dump
-- Server version: 5.1.40
-- PHP Version: 5.3.3
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Database: `Library`
--
-- --------------------------------------------------------
--
-- Table structure for table `Author`
--
CREATE TABLE IF NOT EXISTS `Author` (
`id_a` smallint(4) NOT NULL AUTO_INCREMENT,
`surname` varchar(25) NOT NULL,
PRIMARY KEY (`id_a`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 COMMENT='Авторы' AUTO_INCREMENT=37 ;
--
-- Dumping data for table `Author`
--
INSERT INTO `Author` (`id_a`, `surname`) VALUES
(2, 'Гоголь Н. В.'),
(4, 'Пушкин А. С.'),
(12, 'Достоевский Ф. Н.'),
(13, 'Толстой Л. Н.'),
(20, 'Шилдт Г.'),
(21, 'Горяинова К. К.'),
(25, 'Горт ТТ'),
(27, 'третий'),
(28, 'Синилов Г. К.'),
(29, 'Шумилов А. Ю.'),
(30, 'Овчинский В. С.'),
(32, 'ппп');
-- --------------------------------------------------------
--
-- Table structure for table `Book`
--
CREATE TABLE IF NOT EXISTS `Book` (
`id_b` smallint(4) NOT NULL AUTO_INCREMENT,
`lib_id` tinyint(1) NOT NULL,
`isbn` char(11) NOT NULL,
`title` varchar(60) NOT NULL COMMENT 'название книги',
`year` year(4) DEFAULT NULL COMMENT 'год издания',
`status` tinyint(1) NOT NULL,
PRIMARY KEY (`id_b`),
UNIQUE KEY `isbn` (`isbn`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 COMMENT='Книги' AUTO_INCREMENT=15 ;
--
-- Dumping data for table `Book`
--
INSERT INTO `Book` (`id_b`, `lib_id`, `isbn`, `title`, `year`, `status`) VALUES
(4, 10, '97859057998', 'Евгений Онегин', 2012, 1),
(5, 10, '97858459168', 'C# 4.0 Полное Руководство', 2011, 0),
(6, 10, '97858459156', 'C# 3.0 Полное Руководство', 2010, 1),
(8, 10, '5160017127', 'Оперативно-розыскная деятельность: учебник. 2-е изд.', 2004, 1);
-- --------------------------------------------------------
--
-- Table structure for table `Lib`
--
CREATE TABLE IF NOT EXISTS `Lib` (
`lib_id` tinyint(1) NOT NULL,
`lib_name` varchar(25) NOT NULL,
`address` varchar(30) NOT NULL,
`phone` char(11) NOT NULL,
PRIMARY KEY (`lib_id`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 COMMENT='Библиотеки';
--
-- Dumping data for table `Lib`
--
INSERT INTO `Lib` (`lib_id`, `lib_name`, `address`, `phone`) VALUES
(10, 'Районная библиотека №6', 'Ленинский пр., 93', '725-11-23');
-- --------------------------------------------------------
--
-- Table structure for table `people`
--
CREATE TABLE IF NOT EXISTS `people` (
`id_p` smallint(4) NOT NULL AUTO_INCREMENT,
`num` char(10) NOT NULL,
`surname` varchar(25) NOT NULL,
`name` varchar(25) NOT NULL,
`mid_name` varchar(25) DEFAULT NULL,
`address` varchar(50) NOT NULL,
`phone` char(11) NOT NULL,
`group` char(1) NOT NULL,
PRIMARY KEY (`id_p`),
UNIQUE KEY `num` (`num`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 COMMENT='Люди' AUTO_INCREMENT=13 ;
--
-- Dumping data for table `people`
--
INSERT INTO `people` (`id_p`, `num`, `surname`, `name`, `mid_name`, `address`, `phone`, `group`) VALUES
(1, '1234567899', 'Иванов', 'Илья', 'Максимович', 'ул. Димитрова, д.5, кв.201', '89210511253', 'R'),
(2, '4472123596', 'Котов', 'Александр', 'Владимирович', 'ул. Десантников 20, кв. 35', '89053221564', 'R'),
(4, '9876543210', 'Норд', 'Гус', '', 'х', '89216329754', 'R'),
(10, '4468615493', 'Иванов', 'Сергей', 'Павлович', 'ул. Маршала Жукова д. 31, кв. 40', '89043531413', 'N'),
(11, '3698541257', 'Жукова', 'Вера', 'Петровна', 'тттт', '9334432', 'N'),
(12, '1131111112', 'Великий', 'Каа', '', 'под мостом', '225', 'N');
-- --------------------------------------------------------
--
-- Table structure for table `ReadBook`
--
CREATE TABLE IF NOT EXISTS `ReadBook` (
`id` smallint(4) NOT NULL AUTO_INCREMENT,
`isbn` char(11) NOT NULL,
`id_r` smallint(4) NOT NULL,
`date1` date NOT NULL,
`date2` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 AUTO_INCREMENT=9 ;
--
-- Dumping data for table `ReadBook`
--
INSERT INTO `ReadBook` (`id`, `isbn`, `id_r`, `date1`, `date2`) VALUES
(3, '5160017127', 1, '2012-11-20', '2012-11-30'),
(6, '97859057998', 2, '2012-11-25', '2012-12-15'),
(8, '97858459156', 2, '2012-12-01', '2012-12-21');
--
-- Triggers `ReadBook`
--
DROP TRIGGER IF EXISTS `b_ins_readbook`;
DELIMITER //
CREATE TRIGGER `b_ins_readbook` BEFORE INSERT ON `ReadBook`
FOR EACH ROW begin
UPDATE readers SET readers.kolb = readers.kolb+1 where readers.id_r=new.id_r;
update book set book.status='1' where book.isbn=new.isbn;
end
//
DELIMITER ;
DROP TRIGGER IF EXISTS `b_del_readbook`;
DELIMITER //
CREATE TRIGGER `b_del_readbook` BEFORE DELETE ON `ReadBook`
FOR EACH ROW begin
UPDATE readers SET readers.kolb = readers.kolb-1 where readers.id_r=old.id_r;
update book set book.status='0' where book.isbn=old.isbn;
end
//
DELIMITER ;
-- --------------------------------------------------------
--
-- Table structure for table `Readers`
--
CREATE TABLE IF NOT EXISTS `Readers` (
`id_r` smallint(4) NOT NULL AUTO_INCREMENT COMMENT 'номер читателя',
`lib_id` tinyint(1) NOT NULL,
`id_p` smallint(4) NOT NULL,
`kolb` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'количество книг',
PRIMARY KEY (`id_r`),
UNIQUE KEY `num` (`id_p`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 COMMENT='Читатели' AUTO_INCREMENT=6 ;
--
-- Dumping data for table `Readers`
--
INSERT INTO `Readers` (`id_r`, `lib_id`, `id_p`, `kolb`) VALUES
(1, 10, 1, 1),
(2, 10, 2, 2),
(3, 10, 4, 0),
(4, 10, 10, 0),
(5, 10, 11, 0);
-- --------------------------------------------------------
--
-- Table structure for table `WriteBook`
--
CREATE TABLE IF NOT EXISTS `WriteBook` (
`id` smallint(4) NOT NULL AUTO_INCREMENT,
`isbn` char(11) NOT NULL,
`id_a` smallint(4) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 AUTO_INCREMENT=21 ;
--
-- Dumping data for table `WriteBook`
--
INSERT INTO `WriteBook` (`id`, `isbn`, `id_a`) VALUES
(4, '97859057998', 4),
(5, '97858459168', 20),
(7, '97858459156', 20),
(8, '5160017127', 21),
(9, '97859057998', 25),
(11, '97859057998', 27),
(12, '5160017127', 28),
(13, '5160017127', 29),
(14, '5160017127', 30),
(16, '34535', 32),
(17, '3658946', 33),
Приложение 2
Описание триггеров
delimiter \\
--описание для триггера b_ins_readbook
CREATE trigger b_ins_readbook before INSERT ON readbook
FOR each row
begin
UPDATE readers SET readers.kolb = readers.kolb+1 where readers.id_r=new.id_r;
update book set book.status='1' where book.isbn=new.isbn;
end
\\
-- описание для триггера b_del_readbook
CREATE trigger b_del_readbook before delete ON readbook
FOR each row
begin
UPDATE readers SET readers.kolb = readers.kolb-1 where readers.id_r=old.id_r;
update book set book.status='0' where book.isbn=old.isbn;
end
\\
Delimiter;
Оглавление
ПЕРВОЕ ВЫСШЕЕ ТЕХНИЧЕСКОЕ УЧЕБНОЕ ЗАВЕДЕНИЕ РОССИИ 1
«НАЦИОНАЛЬНЫЙ МИНЕРАЛЬНО-СЫРЬЕВОЙ УНИВЕРСИТЕТ «ГОРНЫЙ» 1
2012 2
1. Техническое задание 3
2. Описание СУБД 3
3. Инфологическая модель 4
3. 1 Описание предметной области 4
3.2 Инфологическая схема объектов и связей 4
3.3 Ограничения предметной области 5
3.4Основные операции в данном фрагменте предметной области 5
4. Концептуальная модель 7
Ограничения предметной области в концептуальной модели 7
Триггеры 7
6. Физическая модель 11
Список использованной литературы 12
Приложение 1 13
Приложение 2 21
Оглавление 22
|