Смекни!
smekni.com

Нормализация таблиц в реляционной модели базы данных (стр. 3 из 3)

3. База данных для предметной области “Учебные пособия"


Ненормализованное представление информации в виде схемы.

Приведение к третьей нормальной форме.

первая нормальная форма - каждое поле таблицы представляет уникальный тип информации;

Таблица “Дисциплины" - номер дисциплины, наименование дисциплины, количество часов;

Таблица “Пособия” - номер пособия, ФИО автора, Номер дисциплины;

Таблица “Специальности” - номер специальности, наименование специальности;

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

Таблица “Дисциплины" - номер дисциплины;

Таблица “Пособия” - номер пособия;

Таблица “Специальности” - номер специальности.

третья нормальная форма - столбцы, не являющиеся ключевыми, зависят от первичного ключа таблицы и не зависят от всех остальных столбцов. Для связывания таблиц “Дисциплины" и “Специальности” необходимо создать дополнительную таблицу “Дисциплины-Специальности".

Таблица “Дисциплины-Специальности" - номер дисциплины, номер специальности.


Данные таблиц.

Таблица 3.1 - Таблица “Дисциплины”

Номер дисциплины Наименование дисциплины Количество часов
1 Информатик 132
2 Экономика 180
3 Базы данных 72
4 Основы бухгалтерского учета 86
5 Основы программирования 92
6 Теория вероятностей и математическая статистика 146
7 Мировая экономика 112
8 Компьютерные сети 98

Таблица 3.2 - Таблица “Пособия”

Номер пособия ФИО автора Номер дисциплины
1 Джон Вейкас 3
2 Роджер Дженнингс 3
3 Вирджиния Андерсон 1
4 Попов А.А. 1
5 Булатов А.С. 2
6 Бендина Н.В. 4
7 Видяпин В.И. 2
8 Дурович А.П. 4
9 Коуров Л.В. 1
10 Кашанин Т.В. 7
11 Гмурман В.Е. 6
12 Кенин А.М. 8
13 Питер Эйткен 5
14 Подбельский В.В. 5
15 Вендров А.М. 7
16 Рапаков Г.Г. 8
17 Якушева Г.В. 6
18 Комягина В.Б. 4
19 Бердиченко Е.В. 7

Таблица 3.3 - Таблица “Специальности”

Номер дисциплины Наименование дисциплины
101170 Прикладная информатика в экономике
220135 Программное обеспечение ВТ и АС
11370 Бухгалтерский учет
13568 Экономическая теория
73809 Администрирование компьютерных сетей

Таблица 3.4 - Таблица “Дисциплины - Специальности"

Номер специальности Номер дисциплины
101170 1
101170 5
101170 6
101170 2
101170 7
220135 1
220135 5
220135 6
220135 3
11370 1
11370 4
11370 2
13568 2
13568 6
13568 7
13568 1
73809 3
73809 5
73809 8

Создание таблиц. Для создания запросов выбрана СУБД ACCESS.

CREATE дисциплины (number integer,

name_disz varchar (100),

hour integer);

CREATE пособия (number integer,

author varchar (100),

diszipl integer);

CREATE специальности (number varchar (10),

name_spez varchar (100));

CREATE дисциплины_специальности (number_spez varchar (100),

number_diszinteger).

Заполнение таблиц данными. Для примера показаны вставки по одной записи.

INSERT INTO дисциплины (number, name_disz, hour) VALUES (1, “Информатика”, 132);

INSERTINTO специальности (number, name_spez) VALUES (“101170", “Прикладная информатика в экономике”);

INSERT INTO пособия (number, autor, diszipl) VALUES (1, “Джон Вейкас”, 3);

INSERT INTO дисциплины_специальности (number_spez, number_disz) VALUES (“101170”, 1)

Запрос1 - Для номера специальности “220135" вывести наименование этой специальности, наименования дисциплин для этой специальности, у которых количество часов больше 90 и меньше 140, а также авторов пособий для этих дисциплин.

SELECT специальности. number AS "Номер специальности",

специальности. name_spezAS "Специальность",

дисциплины. name_diszAS "Дисциплина",

дисциплины. hourAS "Количество часов",

пособия. authorAS "Автор пособия"

FROM специальности, дисциплины, пособия,

дисциплины_специальности

WHERE дисциплины_специальности. number_disz=дисциплины. number And

дисциплины_специальности. number_spez=специальности. number And

пособия. diszipl=дисциплины. number And

специальности. number="220135" And

дисциплины. hour Between 90 And 140

ORDER BY дисциплины. name_disz, пособия. author;

Запрос 2 - Вывести для каждой специальности номер специальности, наименование специальности, количество дисциплин для каждой специальности, у которых количество часов больше 90 и меньше 150.

SELECT специальности. number AS "Номер специальности",

специальности. name_spez AS "Специальность",

COUNT (дисциплины_специальности. number_disz) AS "Количество

дисциплин"

FROM специальности, дисциплины_специальности, дисциплины

WHERE дисциплины_специальности. number_spez=специальности. number

And дисциплины_специальности. number_disz=дисциплины. number

And дисциплины. hour Between 90 And 150

GROUP BY специальности. number, специальности. name_spez

ORDER BY специальности. name_spez;

Литература

1. Базы данных: теория и практика: Учебник для вузов/ Б.Я. Советов., В.В. Цехановский, В.Д. Черотовской. - М.: Высш. шк., 2005. - 463 с. ил.

2. Вейскас Д. эффективная работа с MicrosoftAccess 97 - СПб: ЗАО “Издательство “Питер””, 1999. - 976 с.: ил.

3. В.В. Корнеев, А.Ф. Гареев, С.В. Васютин, В.В. Райх. Базы данных. Интеллектуальная обработка информации. - М.: Издатель Момачева С.В., Издательство Нолидж, 2001. - 496 с., ил.

4. Дженнингс, Роджер. Использование MicrosoftAccess 2000. Специальное издание.: Пер. с англ.: Уч. пос. - М.: Издательский дом “Вильямс", 2000. - 1152 с.: ил. - Парал. тит. англ.