Автор работы: Пользователь скрыл имя, 08 Декабря 2013 в 19:35, лабораторная работа
База данных создается для информации о структуре предприятия.
БД должна содержать:
информацию по отделам, цехам и т.п
информацию о работающих
информацию о графике работы
Нормализация 4
Первая нормальная форма 5
Вторая нормальная форма 7
Третья нормальная форма 8
Физическая модель БД 9
Таблица rabotniki 9
Таблица kontrakt 9
Таблица dolgnost 9
Таблица ceh 10
Таблица graphic_raboti 10
Таблица inform_o_rab 10
Создание таблиц 11
Код таблицы rabotniki: 11
Код таблицы kontrakt: 11
Код таблицы dolgnost: 11
Код таблицы ceh: 12
Код таблицы graphik_raboti: 12
Код таблицы inform_o_rab: 12
Некоторые функции MySQL 13
DROP TABLE 13
ALTER TABLE 13
UPDATE 14
Содержание
Системный анализ предметной области 3
Нормализация 4
Первая нормальная форма 5
Вторая нормальная форма 7
Третья нормальная форма 8
Физическая модель БД 9
Таблица rabotniki 9
Таблица kontrakt 9
Таблица dolgnost 9
Таблица ceh 10
Таблица graphic_raboti 10
Таблица inform_o_rab 10
Создание таблиц 11
Код таблицы rabotniki: 11
Код таблицы kontrakt: 11
Код таблицы dolgnost: 11
Код таблицы ceh: 12
Код таблицы graphik_raboti: 12
Код таблицы inform_o_rab: 12
Некоторые функции MySQL 13
DROP TABLE 13
ALTER TABLE 13
UPDATE 14
База данных создается для информации о структуре предприятия.
БД должна содержать:
В соответствии с предметной областью система строится с учетом следующих особенностей:
а) один сотрудник работает на одной должности
б) сотрудник не может работать сразу в 2 смены.
Выделим базовые сущности этой предметной области:
Работники предприятия. Атрибуты работников:
Контракт. Атрибуты контракта:
Должность. Атрибуты должности:
Цех. Атрибуты цеха:
График работы. Атрибуты графика:
Выводы. Система должна обеспечивать:
а) поиск информации о месте нахождения товара
б) поиск информации о сотруднике, принявшем товар
в) поиск информации об оборудовании для товара
г) фиксировать дату поступления товар
Целью нормализации является
исключение избыточности данных, которая
является причиной ошибок при вводе
и нерационального
Нормализация представляет
собой процесс
Таблица находится в 1НФ, если она удовлетворяет следующим требованиям:
а) не содержит полей с несколькими значениями;
б) ключевое поле не имеет пустот.
Первым требованием
Вторым требованием через определение первичного ключа обеспечивается уникальность записей таблицы. Как правило, в 1НФ первичный ключ является составным.
На рис. 1 представлен список таблиц проектируемой базы данных.
По определению логическая модель является отображением концептуальной модели, в частности диаграммы классов. В данном случае исходными данными будут являться четыре таблицы (Рис.1) , выделенных при построении концептуальной модели. Проанализируем их в соответствии с требованиями.
rabotniki
FIO_rabotnika |
pasp_dann |
adress |
phone |
pol |
dolgnost
dolgnost |
oklad_po_dolgnosti |
kontrakt
data_kont |
nomer_kontr |
ceh
nazvanie |
Nomer_ceha |
raspolozhenie |
kolvo_sotrudnikov |
graphic_raboti
nomer_smeni |
vremja_raboti |
Рисунок 1 – Структура таблиц базы данных «Учет товара»
В таблицах на рис.1 не все поля удовлетворяют требованиям 1НФ. В частности, поле «FIO_rabotnika» в таблице "rabotniki" содержит информацию о фамилии, имени и отчестве сотрудника. Поэтому делим его нa«fam_rab»,«im_rab» и«ot_rab».Поле «pasp_dann» в таблице «rabotniki»содержит несколько значений - данные о серии, номере и дате выдачи документа, а также о наименовании государственного органа, выдавшего документ.С целью поддержания целостности данных о сотрудниках целесообразно разбить данное поле на три поля: «s_n_pasp», «data_vid_pasp» и «mest _vid_pasp».
Таким образом, получили список
атомарных полей без
Чтобы обеспечить второе требование необходимо определить первичные ключи в каждой таблице.
В таблицах «rabotniki», «kontrakt»,«dolgnost» ,«ceh»и «graphic_raboti»нет подходящих полей для первичного ключа, поэтому вводим в данные таблицы семантически незначащие поля «id_rab», «id_kontr», «id_dolg»,«id_ceha» и «id_graphika» соответственно, которые однозначно определяют остальные не ключевые поля.
Поскольку ключевые поля всех таблиц не имеют пустот (Рис-2), то процесс приведения таблиц к 1НФ считаем завершенным.
rabotniki
id_rabotnika |
fam_rab |
im_rab |
ot_rab |
s_n_pasp |
data_vid_pasp |
mest _vid_pasp |
adress |
phone |
pol |
kontrakt
id_kontrakta |
data_kontr |
nom_kontr |
dolgnost
id_dolg |
dolgnost |
oklad_po_dolg |
ceh
id_ceha |
nazvanie |
n_ceha |
raspolozhenie |
kolvo_sotr |
graphik_raboti
id_graphika |
n_smeni |
kolvo_chasov |
Рисунок 2 – Структура таблиц в первой нормальной форме
Таблица находится во 2НФ, если она удовлетворяет следующим требованиям:
а)таблица должна быть приведена к 1 НФ;
б)поля, которые зависят только от части первичного ключа должны быть выделены в состав отдельных таблиц;
в) все таблицы должны быть связаны между собой.
В рассматриваемом примере
таблицы приведены к 1 НФ, то есть
одно из требований 2НФ выполнено. Для
обеспечения второго
Так ключевые поля всех таблиц, представленных на рис.1являются простыми и однозначно определяют детальные неключевые поля соответствующих таблиц. Второе требование 2НФ выполнено, перейдем к выполнению третьего требования.
Для того, чтобы связать все таблицы между собой, создадим таблицу «Prixod»с полями «Prixod», «data_postupleniya», «Id_sotrudnika», «Id_oborudovaniya», «Id_tovara» и «Id_pomecheniya». Первичным ключом в этой таблице назначим поле «Id_prixoda». Между тем один сотрудник может принимать несколько товаров, один вид оборудования может использоваться для нескольких товаров, в одном помещении могут храниться несколько товаров и один товар могут принимать несколько сотрудников, таким образом, образуется связь типа «один-ко-многим».
Поскольку все таблицы связаны между собой (Рис.3), то процесс приведения таблиц ко 2НФ считаем завершенным.
Рисунок3 –Структура таблиц вовторойнормальной форме
Таблица находится в 3НФ, если она удовлетворяет следующим требованиям:
а) таблицы должны быть приведены ко 2НФ;
б) не должно быть транзитивных зависимостей между не ключевыми полями;
Оба требования соблюдены, значит, таблица приведена к 3НФ (Рис.-4).
Рисунок4 –Структура таблиц в третьей нормальной форме
Имя поля |
Тип данных |
Ограничения |
Описание |
id_rab |
INT |
PRIMARY KEY, AUTO_INCREMENT |
Код сотрудника, ПК, автовыч.поле |
fam_rab |
VARCHAR(30) |
NOT NULL |
Фамилия сотрудника |
im_rab |
VARCHAR(30) |
NOT NULL |
Имя сотрудника |
ot_rab |
VARCHAR(30) |
NOT NULL |
Отчество сотрудника |
s_n_pasp |
VARCHAR(15) |
NOT NULL |
Серия и номер паспорта сотрудника |
data_vid_pasp |
DATE |
NOT NULL |
Дата выдачи паспорта сотрудника |
mest _vid_pasp |
VARCHAR(100) |
NOT NULL |
Место выдачи паспорта сотрудника |
dolgnost |
VARCHAR(30) |
NOT NULL |
Должность сотрудника |
adress |
VARCHAR(100) |
NOT NULL |
Адрес сотрудника |
phone |
VARCHAR(30) |
NOT NULL |
Телефон сотрудника |
pol |
VARCHAR(30) |
NOT NULL |
Пол сотрудника |
Имя поля |
Тип данных |
Ограничения |
Описание |
Id_kontr |
INT |
PRIMARY KEY, AUTO_INCREMENT |
Код контракта, ПК, автовыч.поле |
data_kontr |
DATE |
NOT NULL |
Дата подписания контракта |
nom_kontr |
INT |
NOT NULL |
Номер контракта |
Имя поля |
Тип данных |
Ограничения |
Описание |
id_dolg |
INT |
PRIMARY KEY, AUTO_INCREMENT |
Код должности, ПК, автовыч.поле |
dolgnost |
VARCHAR(30) |
NOT NULL |
Название должности |
okl_po_dol |
BIGINT |
NOT NULL |
Оклад по должности |
id_ceha |
INT |
PRIMARY KEY, AUTO_INCREMENT |
Код цеха, ПК, автовыч.поле |
nazvanie |
VARCHAR(30) |
NOT NULL |
Название цеха |
n_ceha |
INT |
NOT NULL |
Номер цеха |
raspolozhenie |
VARCHAR(30) |
NOT NULL |
Расположение цеха |
Kolvo_rab |
INT |
NOT NULL |
Количество рабочих в цеху |
Имя поля |
Тип данных |
Ограничения |
Описание |
id_graphika |
INT |
PRIMARY KEY, AUTOINCREMENT |
Код графика работы, ПК, автовыч.поле |
n_smeni |
INT |
NOT NULL |
Номер смены |
vrem_raboti |
VARCHAR(30) |
NOT NULL |
Время работы сотрудника |
Имя поля |
Тип данных |
Ограничения |
Описание |
id_inform |
INT |
PRIMARY KEY, AUTOINCREMENT |
Код информации, ПК, автовыч.поле |
id_rab |
INT |
FOREIGN KEY, ON DELETE CASCADE |
ВК, связь: rabotniki (id_rab) |
id_kontr |
INT |
FOREIGN KEY, ON DELETE CASCADE |
ВК, связь: kontrakt (id_kontr) |
id_dolg |
INT |
FOREIGN KEY, ON DELETE CASCADE |
ВК, связь: dolgnost (id_dolg) |
id_ceha |
INT |
FOREIGN KEY, ON DELETE CASCADE |
ВК, связь: ceh (id_ceha) |
id_graphika |
INT |
FOREIGN KEY, ON DELETE CASCADE |
ВК, связь: graphic_raboti (id_graphika) |
CREATE TABLE rabotniki
(
id_rab int AUTO_INCREMENT PRIMARY KEY,
fam_rab Varchar(30) NOT NULL,
im_rab Varchar(30) NOT NULL,
ot_rab Varchar(30) NOT NULL,
s_n_pasp Varchar(30) NOT NULL,
data_vid_pasp DATE NOT NULL,
mesto_vid_pasp Varchar(30) NOT NULL,
adress Varchar(100) NOT NULL,
pol Varchar(10) NOT NULL,
phone bigint NOT NULL);
CREATE TABLE kontrakt
(
id_kontr int AUTO_INCREMENT PRIMARY KEY,
data_kontr DATE NOT NULL,
nom_kontr int NOT NULL);