Приведение к третьей нормальной форме.
первая нормальная форма - каждое поле таблицы представляет уникальный тип информации;
Таблица “Дисциплины" - номер дисциплины, наименование дисциплины, количество часов;
Таблица “Пособия” - номер пособия, ФИО автора, Номер дисциплины;
Таблица “Специальности” - номер специальности, наименование специальности;
вторая нормальная форма - каждая таблица должна иметь первичный ключ, который может состоять из одного Ии нескольких полей.
Таблица “Дисциплины" - номер дисциплины;
Таблица “Пособия” - номер пособия;
Таблица “Специальности” - номер специальности.
третья нормальная форма - столбцы, не являющиеся ключевыми, зависят от первичного ключа таблицы и не зависят от всех остальных столбцов. Для связывания таблиц “Дисциплины" и “Специальности” необходимо создать дополнительную таблицу “Дисциплины-Специальности".
Таблица “Дисциплины-Специальности" - номер дисциплины, номер специальности.
Данные таблиц.
Таблица 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 с.: ил. - Парал. тит. англ.