Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Нормализация

Читайте также:
  1. Закалка, отжиг, нормализация.
  2. Нормализация и универсализация сборочно-сварочных приспособлений

 

Приведение к 1НФ.

1 требование (требование простой структуры). Каждую сущность с атрибутами представил в виде множества строк. Объединённых ячеек нет.

2 требование (отсутствие одинаковых по смыслу полей). Повторяющихся полей нет.

3 требование (отсутствие составных полей). Составных полей нет.

4 требование (в табл. не должно быть одинаковых записей). В таблице нет одинаковых записей.

С учётом данных требований получаем таблицы вида, которые представлены на рисунке 2.

 

 

Название Жанр Продолжительность Сюжет Бюджет Сборы Год выпуска Дата премьеры

 

Фамилия Имя Дата рождения Статус Дата смерти Страна

 

Фамилия Имя Дата рождения Фильм Роль в фильме

 

Киностудия Страна Год образования

 

Рисунок 2 – Приведение к 1НФ.

 

Приведение ко 2НФ.

Выписываем атрибуты каждой сущности Фильмы, Люди, Производители, Участие в фильме.

Определяем у каждой сущности первичный ключ. Сущность Фильмы - первичный ключ Название, год выпуска. Люди –Код человека. Участие в фильмах – Код участия. Производители – Код киностудии.

Т.к. для некоторых атрибутов удобнее выделить Код, поэтому Код выделяем для следующих атрибутов: Человек, Страна, Фильм, Жанр, Киностудия.

Таблица Люди с таблицей Участие в фильме имеет связь «один ко многим», т.к. в каждом фильме принимает участие несколько людей, а конкретную роль исполняет только один человек.

Таблица Страны с таблицей Люди имеет связь «один ко многим», в каждой стране проживает множество людей, но конкретный человек относится к одной стране.

Таблица Жанры с таблицей Фильмы имеет связь «один ко многим», т.к. в каждом жанре создано множество фильмов, но каждый фильм принадлежит к одному жанру.

Остальные таблицы связаны аналогично.

 

Приведение к 3НФ.

Т.к. транзитивных зависимостей нет, то 2НФ является и 3НФ.

С учётом всех пунктов получим таблицу следующего вида, показанную на рисунке 3.

 

 

Код человека
Фамилия Имя Дата рождения Статус Код страны Дата Смерти

 

  Код фильма
  Название Продолжительность Год выпуска Сюжет Бюджет Сборы
 
Дата премьеры

Страны
Код жанра

  Код страны  
  Название
Жанры
Континент

 
  Код жанра  
 
Тип участия
Название жанра

 
Код типа  
Название типа  
             

 

 
 
Участие в фильмах


Код записи
Код человека Код фильма Роль в фильме

Фильмы

 

 

Код киностудии
Код страны Киностудия Год образования

 

Код записи
Код киностудии Код фильма Код типа участия

Рисунок 3 – Нормализация БД.  
Производство фильмов
Производители

2 Реализация серверной части. Язык запросов SQL

Язык SQL позволяет в виде команд представить все действия с базой. Вся работа с базой выполняется с помощью SQL запросов. Любые другие методы доступа приводили бы к обходу системы защиты и могли бы явиться причиной нарушения требований безопасности и целостности.

Создание таблиц выполняется командой CREATE TABLE. Для создаваемой таблицы указывается название полей и все ограничения. Т.е. ранее спроектированная таблица полностью и без изменений передаётся на сервер и выполняется это с помощью SQL запроса.

 

Создание таблицы Страны (strany):

CREATE TABLE strany

(kod_strany NUMBER CONSTRAINT pk_kod_strany PRIMARY KEY,

nazvanye VARCHAR2(30),

continent VARCHAR2(30))

 

Строки ограничений целостности начинаются со слова CONSTRAINT, для них указывается имя ограничения, чтобы к нему можно было обращаться. Ограничение указывается для конкретного поля, пишется напротив него.

Если SQL запрос написан правильно, будет возвращена строка: таблица создана.

 

Создание таблицы Типы участия (tipy_uchstiya):

CREATE TABLE tipy_uchastiya

(kod_tipa NUMBER CONSTRAINT pk_kod_tipa PRIMARY KEY,

nazvanye_tipa VARCHAR2(30))

 

 

Создание таблицы Жанры (zhanry):

CREATE TABLE zhanry

(kod_zhanra NUMBER CONSTRAINT pk_kod_zhanra PRIMARY KEY,

nazvanye_zhanra VARCHAR2(30))

 

 

Создание таблицы Фильмы (filmy):

CREATE TABLE filmy

(kod_filma NUMBER CONSTRAINT pk_kod_filma PRIMARY KEY,

nazvanye_filma VARCHAR2(30) CONSTRAINT nn_nazvanye_filma NOT NULL,

prodolzitelnost NUMBER CONSTRAINT nn_prodolzitelnost NOT NULL,

god_vipuska NUMBER CONSTRAINT nn_god_vipuska NOT NULL,

suzhet VARCHAR2(100) CONSTRAINT nn_suzhet NOT NULL,

budzhet NUMBER CONSTRAINT nn_budzhet NOT NULL,

sbory NUMBER CONSTRAINT nn_sbory NOT NULL,

data_premiery DATE CONSTRAINT nn_data_premiery NOT NULL,

kod_zhanra NUMBER CONSTRAINT fk_kod_zhanra REFERENCES zhanry(kod_zhanra))

 

 

Создание таблицы Участие в фильме (uchastie):

CREATE TABLE uchastie

(kod_zapisy NUMBER CONSTRAINT pk_kod_zapisy PRIMARY KEY,

kod_filma NUMBER CONSTRAINT fk_kod_filma REFERENCES filmy(kod_filma),

rol VARCHAR2(30) CONSTRAINT nn_rol NOT NULL,

kod_chelovekauch NUMBER CONSTRAINT fk_kod_chelovekaych REFERENCES ludi(kod_cheloveka)

 

 

Создание таблицы Производители (proizvoditely):

CREATE TABLE proizvoditely

(kod_studii NUMBER CONSTRAINT pk_kod_studii PRIMARY KEY,

kod_strany NUMBER CONSTRAINT fk_kod_starny REFERENCES strany(kod_strany),

kinostudia VARCHAR2(30) CONSTRAINT nn_kinostudia NOT NULL,

god_obrazovania NUMBER CONSTRAINT nn_god_obrazovania NOT NULL)

 

Создание таблицы Люди (ludi):

CREATE TABLE ludi

(kod_cheloveka NUMBER CONSTRAINT pk_kod_cheloveka PRIMARY KEY,

familia VARCHAR2(30) CONSTRAINT nn_familia NOT NULL,

imya VARCHAR2(30) CONSTRAINT nn_imya NOT NULL,

data_rozhdeniya DATE CONSTRAINT nn_data_rozhdeniya NOT NULL,

status_zhizny NUMBER,

kod_strany NUMBER CONSTRAINT fk_kod_strany REFERENCES strany(kod_strany),

data_smerty VARCHAR2(30))

 

 

Создание таблицы Производство фильмов (proizvodstvo_filmov):

CREATE TABLE proizvodstvo_filmov

(kod_zapisypr NUMBER CONSTRAINT pk_kod_zapisypr PRIMARY KEY,

kod_studiipr NUMBER CONSTRAINT fk_kod_studiipr REFERENCES proizvoditely(kod_studii),

kod_filmapr NUMBER CONSTRAINT fk_kod_filmapr REFERENCES filmy(kod_filma),

kod_tipapr NUMBER CONSTRAINT fk_kod_tipapr REFERENCES tipy_uchastiya(kod_tipa))

 

Заполнение таблиц информацией выполняется командой INSERT INTO, после которой указывается имя таблицы, в которую добавляется информация. Затем следует строка VALUES(), где в скобках через запятую перечисляются все значения полей таблицы в том же порядке, что и при создании таблицы, причём значения полей символьного типа указываются в кавычках.

В таблицы разрабатываемой базы данных необходимо занести по несколько строк информации.

 

 

Добавление информации в таблицу Страны (strany):

INSERT INTO strany VALUES ('1','USA','sever.amer.')

INSERT INTO strany VALUES ('2','FRANCE','evraziya')

INSERT INTO strany VALUES ('3','GERMANY','evraziya')

INSERT INTO strany VALUES ('4','RUSSIA','evraziya')

INSERT INTO strany VALUES ('5','UKRAINE','evraziya')

 

Вывод данных происходит с помощью команды SELECT, строка FROM указывается таблица.

 

Вывод данных таблицы Страны (strany):

SELECT* FROM strany

 

Результат:

 

Добавление информации в таблицу Типы участия (tipy_uchastiya):

INSERT INTO tipy_uchastiya VALUES ('6','speceffecty')

INSERT INTO tipy_uchastiya VALUES ('7','music')

INSERT INTO tipy_uchastiya VALUES ('8','ozvucka')

INSERT INTO tipy_uchastiya VALUES ('9','montazh')

INSERT INTO tipy_uchastiya VALUES ('10','costumy')

 

 

Вывод данных таблицы Типы участия (tipy_uchastiya):

SELECT* FROM tipy_uchastiya

 

Результат:

 

Добавление информации в таблицу Жанры (zhanry):

INSERT INTO zhanry VALUES ('11','comedy')

INSERT INTO zhanry VALUES ('12','triller')

INSERT INTO zhanry VALUES ('13','drama')

INSERT INTO zhanry VALUES ('14','horror')

INSERT INTO zhanry VALUES ('15','boevik')

 

Вывод данных таблицы Жанры (zhanry):

SELECT* FROM zhanry

 

 

Результат:

 

 

Добавление информации в таблицу Фильмы (filmy):

INSERT INTO filmy VALUES ('16','rokki','119','1976','glavniy geroy- rokki balboa','1100000','225000000',TO_DATE('16-05-1976', 'DD-MM-YYYY'),'13')

INSERT INTO filmy VALUES ('17','nazad v budushee','116','1985','paren popal v pudushee','19000000','380000000',TO_DATE('21-11-1985', 'DD-MM-YYYY'),'11')

INSERT INTO filmy VALUES ('18','nachalo','148','2010','film ob osoznannyh snovedeniah','160000000','823456987',TO_DATE('19-08-2010', 'DD-MM-YYYY'),'12')

INSERT INTO filmy VALUES ('19','matrix','136','1999','programma simulirushaya zhizn','63000000','140000000',TO_DATE('25-04-1999', 'DD-MM-YYYY'),'15')

INSERT INTO filmy VALUES ('20','gorod grehov','124','2005','film o greshnom gorode','40000000','80000000',TO_DATE('11-09-2005', 'DD-MM-YYYY'),'12')

 

Вывод данных таблицы Фильмы (filmy):

SELECT* FROM filmy

 

Результат:

 

 

Добавление информации в таблицу Люди (ludi):

INSERT INTO ludi VALUES ('21','Nolan','Kristofer',TO_DATE('30-07-1970','DD-MM-YYYY'), '1','1','-')

INSERT INTO ludi VALUES ('22','Di Kaprio','Leonardo',TO_DATE('11-11-1974','DD-MM-YYYY'), '1','1','-')

INSERT INTO ludi VALUES ('23','Rives','Kianu',TO_DATE('02-09-1964','DD-MM-YYYY'), '1','1','-')

INSERT INTO ludi VALUES ('24','Stallone','Silvester',TO_DATE('06-06-1946','DD-MM-YYYY'), '1','1','-')

INSERT INTO ludi VALUES ('25','Zemekis','Robert',TO_DATE('14-05-1952','DD-MM-YYYY'), '1','1','-')

 

 

Вывод данных таблицы Люди (ludi):

SELECT* FROM ludi

 

Результат:

 

 

Добавление информации в таблицу Участие в фильме (uchastie):

INSERT INTO uchastie VALUES ('26','18','Dominik Kobb','22')

INSERT INTO uchastie VALUES ('27','18','rezhisser','21')

INSERT INTO uchastie VALUES ('28','16','Rokki Balboa','24')

INSERT INTO uchastie VALUES ('29','19','Neo','23')

INSERT INTO uchastie VALUES ('30','17','rezhisser','25')

 

 

Вывод данных таблицы Участие в фильме (uchastie):

SELECT* FROM uchastie

 

Результат:

 

 

Добавление информации в таблицу Производители (proizvoditely):

INSERT INTO proizvoditely VALUES ('31','1','Warner Bros.','1918')

INSERT INTO proizvoditely VALUES ('32','1','Legendary Pictures.','2005')

INSERT INTO proizvoditely VALUES ('33','1','Syncopy Films','1998')

INSERT INTO proizvoditely VALUES ('34','1','United Artists','1919')

INSERT INTO proizvoditely VALUES ('35','1','Dimension Films','1992')

 

Вывод данных таблицы Производители (proizvoditely):

SELECT* FROM proizvoditely

 

Результат:

 

 

Добавление информации в таблицу Производство фильмов (proizvodstvo_filmov)

INSERT INTO proizvodstvo_filmov VALUES ('36','31','18','9')

INSERT INTO proizvodstvo_filmov VALUES ('37','32','16','10')

INSERT INTO proizvodstvo_filmov VALUES ('38','33','19','7')

INSERT INTO proizvodstvo_filmov VALUES ('39','34','20','8')

INSERT INTO proizvodstvo_filmov VALUES ('40','35','17','6')

 

Вывод данных таблицы Производство фильмов (proizvodstvo_filmov)

SELECT* FROM proizvodstvo_filmov

 

Результат:

 

 

Удаление данных из таблицы происходит командой DELETE.

Из таблицы факультет (zhanry) удаляются записи для которых kod_zhanra=14

 

DELETE FROM zhanry WHERE kod_zhanra=14

Если запрос был написан верно, будет возвращена строка: 1 строка удалена.

 

Результат:

 

 

Модификация данных происходит с помощью команды UPDATE. Для примера проведём модификацию данных таблицы Фильмы (filmy) а именно увеличим продолжительность фильма, код которого равен 17, на 20 минут:

 

UPDATE filmy SET prodolzitelnost=prodolzitelnost+20 where kod_filma=17

 

Результат:

 

 

 

Выбрать из таблицы Фильмы значения полей название и продолжительность для всех записей и отсортировать их по году выпуска:

 

SELECT nazvanye_filma,prodolzitelnost,god_vipuska FROM filmy ORDER BY god_vipuska

 

Результат:

 

 

 

Выбрать из таблицы люди значения фамилия, имя, код страны для всех записей и отсортировать их по дате рождения:

 

SELECT familia,imya,kod_strany,data_rozhdeniya FROM ludi ORDER BY data_rozhdeniya

 

Результат:

 

 

С помощью выборки определить количество записей в таблице Жанры(zhanry):

 

SELECT COUNT(*) FROM zhanry

 

Результат:

 

 

Выбрать из таблицы Фильмы называние фильма и продолжительность, продолжительность которых больше 130 минут:

 

SELECT nazvanye_filma,prodolzitelnost FROM filmy WHERE prodolzitelnost>130

 

Результат:

 

 

 

Выбрать из таблиц Участие, Люди имена и фамилии людей, принимавших участие в фильме с кодом = 18:

 

SELECT imya,familia FROM uchastie,ludi where (kod_filma=18 and kod_chelovekauch=kod_cheloveka)

 

Результат:

 

 

Выбрать из справочной таблицы информацию об объектах в названиях которых нет заданной последовательности букв (na):

 

SELECT nazvanye_filma FROM filmy WHERE nazvanye_filma NOT LIKE 'na%'

 

 

Результат:

 

 

 

Вывести количество фильмов, выпущенных до 2000 года и имеющих бюджет более

10 млн.:

SELECT COUNT (nazvanye_filma) FROM filmy WHERE (god_vipuska<2000 and budzhet>10000000)

 

 

Результат:

 

 

 


Дата добавления: 2015-08-20; просмотров: 60 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Уточнение задач| Розділ I

mybiblioteka.su - 2015-2024 год. (0.04 сек.)