
МОСКОВСКИЙ ЭНЕРГЕТИЧЕСКИЙ ИНСТИТУТ
(НИУ МЭИ)
Типовой расчёт
по курсу Базы Данных
Учебная модель базы данных
ERWin
Выполнил:
студент группы
А-6-09
Зыков М.С.
Проверил:
Бородин Г.А.
Москва, 2011
Целью типового расчета является практическое освоение основ моделирования реляционных баз данных с помощью CASE-средств.
Область применения моделируемой базы данных.
Моделируемая база данных предназначена для применения в электронных каталогах библиотек. Она предоставляет пользователям полную информацию об издательствах (АСТ, Эксмо и тд.) и книгах, выпущенных этими издательствами. База включает в себя такую информацию об издательствах: название, наличие премии “Букер”, кол-во изданных книг, место в рейтинге издательств, год основания, фамилия основателя издательства, логотип, краткая история предприятия, город. О книгах: название, автор, сумма гонорара, кол-во проданных копий, расход на издание, прибыль, год издания, наличие премии “Букер”, жанр, описание.
Ненормализованная база данных.
На представленной выше модели видно, что данная база будет неудобна для работы с ней. Во-первых, информация будет дублироваться, т.к. в одном издательстве была выпущена не одна книга. В полях жанры и города часто будут одни и те же значения. Такая база данных приведет к избыточности, большому размеру, и, следовательно, к понижению быстродействия. Также может возникнуть проблема с потерей необходимых данных при удалении.
Чтобы избежать подобных проблем, необходимо привести базу данных к третьей нормальной форме.
Нормализация базы данных.
Нормализация до первой нормальной формы.
Для приведения базы данных к первой нормальной форме необходимо произвести ряд действий.
Разобьем исходную базу данных на две сущности и назовем их Publishers, где будет храниться информация об издательствах, и Books, где будет храниться информация о книгах, выпущенных этими издательствами.
Это поможет исключить повторяющиеся сведения об издательствах. В сущности Books установим первичный ключ на атрибут с кодом книги. Установим идентифицирующую связь от сущности Publishers к сущности Books. Сложные атрибуты в данной базе отсутствуют.
Таким образом, полученная база данных будет удовлетворять условиям первой нормальной формы. Перейдем к нормализации до второй нормальной формы.
Нормализация до второй нормальной формы.
Так как выбранный первичный ключ в данном случае не является составным, то база данных удовлетворяет условиям второй нормальной формы. Далее нормализуем базу данных до третьей нормальной формы.
Нормализация до третьей нормальной формы.
Для приведения базы данных к третьей нормальной форме необходимо сделать следующие действия: создадим новую сущность Cities, в которой будут храниться города, в которых располагаются издательства, в качестве первичного ключа для этой сущности выберем код города и установим неидентифицирующую связь с сущностью Publishers. Аналогично создадим сущность Genres с информацией о жанрах книг и установим неидентифирующую связь с сущностью Books по коду жанров. Таким образом, база данных удовлетворяет требованиям третьей нормальной формы.
База данных приведена к третьей нормальной форме, что значительно облегчит поиск и работу с данными в будущем.
Теперь смоделируем базу данных в третьей нормальной форме при помощи CASE-средства ERWin версии 4.0.
В качестве реальной СУБД выберем SQL Server 2005.
Созданная модель с представлением на физическом уровне представлена на схеме:
Представление (Рентабельные книги).
Было создано представление, которое использует информацию из сущностей Publishers и Books. Оно выводит информацию: название издательства, его место в рейтинге, логотип издательства, название книги, имя автора, количество проданных копий, описание, вычисляемое поле по конкретной книге (полученные деньги – гонорар автору – затраты на издание).
Критерии отбора и ограничения отображены в SQL-коде:
CREATE VIEW Profitable (Name, TopList, Logo, BookName, Author, Sale, Discription, Profit) AS
SELECT Publishers.Name, Publishers.TopList, Publishers.Logo, Books.BookName, Books.Author, Books.Sale, Books.Discription, Books.Income-Books.Expense-Books.Fee
FROM Books, Publishers
WHERE Books.Income>(Books.Expense+Books.Fee)
go
Производится выборка книг, сумма полученных денег с продажи которых больше, чем гонорар, выплаченный автору и затраты на производство вместе взятые, т.е. поиск успешных и рентабельных книг.
Сведения о таблицах, полях и ключах.
Ниже приведены сведения о созданных таблицах, полях и ключах
Table |
|
Name |
Comment |
Publishers |
Информация об издательствах |
Books |
Информация об издаваемых книгах |
Cities |
Информация о городах |
Genres |
Информация о жанрах |
Column(s) of "Publishers" Table |
||||
Name |
Datatype |
Null Option |
Is PK |
Is FK |
Name |
Text(30) |
NOT NULL |
No |
No |
Bookers |
Yes/No |
NOT NULL |
No |
No |
Count |
Long Integer |
NOT NULL |
No |
No |
TopList |
Long Integer |
NOT NULL |
No |
No |
Year |
Long Integer |
NOT NULL |
No |
No |
Creator |
Text(30) |
NOT NULL |
No |
No |
Logo |
OLE Object |
NOT NULL |
No |
No |
History |
Memo |
NOT NULL |
No |
No |
Publisher_id |
Replication ID |
NOT NULL |
Yes |
No |
City_id |
Replication ID |
NOT NULL |
No |
Yes |
Column(s) of "Cities" Table |
||||
Name |
Datatype |
Null Option |
Is PK |
Is FK |
City_Id |
Replication ID |
NOT NULL |
Yes |
No |
City |
Text(30) |
NOT NULL |
No |
No |
Column(s) of "Books" Table |
||||
Name |
Datatype |
Null Option |
Is PK |
Is FK |
BookName |
Text(30) |
NOT NULL |
No |
No |
Author |
Text(40) |
NOT NULL |
No |
No |
Fee |
Long Integer |
NOT NULL |
No |
No |
Sale |
Long Integer |
NOT NULL |
No |
No |
Expense |
Long Integer |
NOT NULL |
No |
No |
Income |
Long Integer |
NOT NULL |
No |
No |
Imprint_Year |
Long Integer |
NOT NULL |
No |
No |
Booker |
Yes/No |
NOT NULL |
No |
No |
Discription |
Memo |
NOT NULL |
No |
No |
Book_id |
Replication ID |
NOT NULL |
Yes |
No |
Publisher_id |
Replication ID |
NOT NULL |
Yes |
Yes |
Genre_id |
Replication ID |
NOT NULL |
Yes |
Yes |
Column(s) of "Genres" Table |
||||
Name |
Datatype |
Null Option |
Is PK |
Is FK |
Genre_id |
Replication ID |
NOT NULL |
Yes |
No |
Genre |
Text(30) |
NOT NULL |
No |
No |
Были созданы альтернативные ключи, которые не вошли в состав первичного.