Министерство цифрового развития, связи и массовых коммуникаций Российской Федерации
Ордена Трудового Красного Знамени
федеральное государственное бюджетное образовательное учреждение высшего образования
«Московский технический университет связи и информатики»
(МТУСИ)
Кафедра Сетевых Информационных Технологий и Сервисов
Лабораторная работа № 1
по дисциплине: «Интеллектуальные базы данных»
по теме:
«Проектирование базы данных с использованием ER-технологии»
Выполнила: студентка группы М091901(75)
Бармина Анна Владимировна
Проверил: Старший преподаватель Фатхулин Тимур Джалилевич
Москва, 2021
1 Цель работы
В данной лабораторной работе необходимо построить логическую модель данных в соответствии со стандартом IDEF1X и построить физическую модель.
2 Задание
При выполнении лабораторной работы необходимо:
для своего варианта, соответствующего определенной предметной области, построить логическую модель данных в соответствии со стандартом
IDEF1X;
построить физическую модель;
составить отчет по лабораторной работе.
3 Краткая теория
Для заданной предметной области должен быть определен состав реляционных таблиц и логические связи между таблицами. Для каждого атрибута должны быть заданы тип и размер данных, ограничения целостности. Для каждой таблицы – первичный ключ, потенциальные ключи и внешние ключи.
Разработка логической модели методом «сущность-связь» (ER-методом) предусматривает выполнение следующих шагов, детально описанных в работе:
1)построение ER-диаграммы, включающей все сущности и связи, важные с точки зрения интересов предметной области;
2)анализ связей и определение их характеристик – степени связи, мощности и класса принадлежности;
3)построение набора предварительных отношений с указанием предполагаемого первичного ключа для каждого отношения;
2
4)подготовка списка всех неключевых атрибутов и назначение каждого из этих атрибутов одному из предварительных отношений;
5)проверка нахождения всех полученных отношений в нормальной форме Бойса-Кодда;
6)построение модели данных.
4 Выполнение лабораторной работы
Особенности диалекта SQL в СУБД MySQL рассмотрю на примере учебной базы данных book Интернет-магазина, торгующего компьютерной литературой. В базе данных должна поддерживаться следующая информация:
тематические каталоги, по которым сгруппированы книги;
предлагаемые книги (название, автор, издательство, год издания, цена, имеющееся на складе количество);
зарегистрированные покупатели (имя, отчество, фамилия, телефон, номер карты, адрес электронной почты, статус – авторизованный, неавторизованный, заблокированный, активный с хорошей кредитной историей);
покупки, совершенные в магазине (время совершения покупки, число приобретенных экземпляров книги).
Впервую очередь, необходимо определить сущности, которые нужно использовать при проектировании базы данных:
Каталог;
Книга;
Клиент;
Заказ.
Далее, определю атрибуты для каждой сущности:
3
Каталог (Код каталога, Наименование каталога);
Книга (Код книги, Название книги, Автор книги, Издательство, Год издания, Цена книги, Имеющееся количество);
Клиент (Код клиента, Имя клиента, Отчество клиента, Фамилия клиента, Телефон клиента, Номер карты, E-mail клиента, Статус клиента);
Заказ (Код заказа, Дата и время заказа, Заказанное количество).
Определю отношения между сущностями:
Отношение между сущностями «Каталог» и «Книга» представлена как связь «один-ко-многим», так как один каталог может включать много книг;
Отношение между таблицами «Книга» и «Заказ» представлена как связь «один-ко-многим», так как одна книга может присутствовать во многих заказах покупателей;
Отношение между таблицами «Клиент» и «Заказ» представлена как связь «один-ко-многим», так как один пользователь может сделать много заказов.
Определю идентифицирующие атрибуты:
Каталог – «Код каталога», так как он определяет запись о каталоге;
Книга – «Код книги», так как он определяет запись о книге;
Клиент – «Код клиента», так как он определяет запись о клиенте;
Заказ – «Код заказа», так как он определяет запись о заказе.
Определю идентификаторы N-связной сущности. Учитывая отношения между таблицами можно выделить следующие идентификаторы:
Код каталога (FK) в сущности «Книга»;
Код книги (FK) и Код клиента (FK) в сущности «Заказ».
Далее составлю логическую модель данных предметной области.
4
Логическая модель данных
Логическая модель данных предметной области в стандарте IDEF1X представлена на рисунках 1 и 2. Выделены сущности КАТАЛОГ, КНИГА, КЛИЕНТ, ЗАКАЗ, между которыми установлены неидентифицирующие связи мощностью oдин-ко-многим, определенные спецификой предметной области.
Рисунок 1 – Логическая модель данных предметной области
5
КАТАЛОГ/1
Код каталога
1,1 СОДЕРЖИТ
Наименование каталога
КЛИЕНТ/3
Код клиента
Фамилия клиента
Имя клиента Отчество клиента 0,1 РАЗМЕЩАЕТ
Телефон клиента Номер карты клиента E-mail клиента Статус клиента
КНИГА/2
Код книги
Название книги Автор книги
1,N Издательство
Год издания Цена книги
Имеющееся количество Код каталога (FK)
0,М
ПРИСУТСВУЕТ
1,N
ЗАКАЗ/4
Код заказа
1,N |
Дата и время заказа |
Заказанное количество |
|
|
Код клиента (FK) |
|
Код клиента (FK) |
Рисунок 2 – Логическая модель данных предметной области (увеличенная)
Преобразование в физическую модель данных
Рассмотрю общие принципы преобразования:
Каждая сущность преобразуется в таблицу. Имя сущности становится именем таблицы;
Каждый атрибут становится столбцом таблицы с тем же именем, уточняется тип данных, выбирается более точный формат;
Идентифицирующие атрибуты сущности превращаются в первичный ключ таблицы.
Формула для преобразования: R1 (И1, А1), где R1 – таблица, И1 – первичный ключ таблицы, А1 – столбец таблицы.
6
Преобразую каждую сущность и их атрибуты:
1) Каталог
Сущность «Каталог» преобразуется в соответствующую таблицу «Catalogs». Атрибут «Наименование каталога» преобразуется в соответствующий столбец «cat_name». Идентифицирующий атрибут «Код каталога» преобразуется в соответствующий первичный ключ «cat_ID». Следовательно, получаю:
Catalogs (cat_ID, cat_name).
2) Книга
Сущность «Книга» преобразуется в соответствующую таблицу «Books». Атрибуты «Название книги», «Автор книги», «Издательство», «Год издания», «Цена книги» и «Имеющееся количество» преобразуются в соответствующие столбцы «b_name», «b_author», «b_publisher» «b_year», «b_price» и «b_count».
Идентифицирующий атрибут «Код книги» преобразуется в соответствующий первичный ключ «book_ID». Идентификатор 1-связной сущности «Код каталога» преобразуется в соответствующий внешний ключ «b_cat_ID». Следовательно, получаю:
Books (book_ID, b_name, b_author, b_publisher, b_year, b_price, b_count, b_cat_ID).
3) Клиент
Сущность «Клиент» преобразуется в соответствующую таблицу «Users». Атрибуты «Имя», «Отчество», «Фамилия», «Телефон», «Номер карты», «E- mail клиента» и «Статус клиента» преобразуются соответствующие в столбцы
«u_name», «u_patronymic», «u_surname», «u_phone», «u_card», «u_email» и
«u_status». Идентифицирующий атрибут «Код клиента» преобразуется в соответствующий первичный ключ «user_ID». Следовательно, получаю:
7
Users (user_ID, u_name, u_patronymic, u_surname, u_phone, u_card, u_email, u_status).
4) Заказ
Сущность «Заказ» преобразуется в соответствующую таблицу «Orders». Атрибуты «Дата и время заказа» и «Заказанное количество преобразуются в соответствующие столбцы «o_time» и «o_number». Идентифицирующий атрибут «Код заказа» преобразуется в соответствующий первичный ключ «order_ID». Идентификаторы 2-связной сущности «Код книги» и «Код клиента» преобразуются в соответствующие внешние ключи «o_book _ID» и «o_user_ID». Следовательно, получаю:
Orders (order_ID, o_time, o_number, o_book _ID, o_user_ID).
После всех преобразований получаю физическую модель данных, составленную с помощью программы Visio. Схема представлена на рисунках 3
и 4.
Рисунок 3 – Физическая модель данных
8
|
|
BOOKS |
CATALOGS |
|
Book_ID: INTEGER |
Cat_ID: INTEGER |
|
|
|
b_name: VARCHAR (100) |
|
|
||
|
|
b_author: VARCHAR (100) |
|
|
|
CAT_name: VARCHAR (100) |
|
b_publisher: VARCHAR (100) |
|
b_year: DATE |
|
|
|
b_price: DECIMAL(7,2) |
|
|
b_count: INTEGER |
|
|
|
|
|
b_cat_ID: INTEGER (FK) |
|
|
|
user_ID: INTEGER
u_name: VARCHAR (20) u_patronymic: VARCHAR (20) u_surname: VARCHAR (20) u_phone: VARCHAR (12) u_card: INTEGER
u_email: VARCHAR (20) u_status: ENUM()
ORDERS
ORDER_ID: INTEGER
o_time: DATETIME
o_number: INTEGER
o_user_ID: INTEGER (FK)
o_book_ID: INTEGER (FK)
Рисунок 4 – Физическая модель данных (увеличенная)
Описание физической модели данных
База данных book состоит из четырех таблиц:
catalogs – список торговых каталогов;
books – список предлагаемых книг;
users – список зарегистрированных пользователей магазина;
orders – список заказов (осуществленных сделок).
Таблица catalogs состоит из двух полей:
cat_ID – уникальный код каталога (тип INTEGER, так как код каталога может принимать только целые числа);
cat_name – имя каталога (тип VARCHAR – строковая переменная, так как буду записывать названия каталогов).
Оба поля должны быть снабжены атрибутом NOT NULL, поскольку неопределенное значение для них недопустимо.
9
Таблица books состоит из восьми полей:
book_ID – уникальный код книги (тип INTEGER, так как код книги может принимать только целые числа);
b_name – название книги (тип VARCHAR – строковая переменная, так как буду записывать названия книг);
b_author – автор книги (тип VARCHAR – строковая переменная, так как буду записывать ФИО авторов книг);
b_publisher – издательство книги (тип VARCHAR – строковая переменная, так как буду записывать название издательства книги);
b_year – год издания (тип YEAR, так как буду записывать годы издания книг);
b_price – цена книги (тип DECIMAL, так как буду записывать стоимость книг числами используя также дробную часть);
b_count – количество книг на складе (тип INTEGER, так как количество книг может принимать только целые числа);
b_cat_ID – код каталога из таблицы catalogs (тип INTEGER, так как тот же тип переменных имеет столбец cat_ID в таблице catalogs).
Цена книги b_price и количество экземпляров на складе b_count могут иметь атрибут NULL.На момент доставки часто неизвестны количество товара и его цена, но отразить факт наличия товара в прайс-листе необходимо.
Поле b_cat_ID устанавливает связь между таблицами catalogs и books. Это поле должно быть объявлено как внешний ключ (FK) с правилом каскадного удаления и обновления. Обновление таблицы catalogs вызовет автоматическое обновление таблицы books. Удаление каталога в таблице catalogs приведет к автоматическому удалению всех записей в таблице books, соответствующих каталогу.
Таблица users состоит из восьми полей:
user_ID – уникальный код покупателя (тип INTEGER, так как код получателя может принимать только целые числа);
10