Проектирование реляционной БД с помощью нормализации

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    3,03 Мб
  • Опубликовано:
    2013-09-24
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Проектирование реляционной БД с помощью нормализации

Министерство образования и науки РФ

Хакасский Технический Институт - филиал ВГАОУ

ВПО «Сибирский Федеральный Университет»

Кафедра «Прикладная информатика и экономика»






Расчетно - пояснительная записка к курсовой работе по дисциплине «Базы данных»

Тема: «Проектирование реляционной БД с помощью нормализации»

Вариант № 3












Абакан 2013

Задание

Разработать инфологическую модель данных каталога магазина цифровых дисков. По полученной модели построить реляционную БД с использованием нормализации.

Описание предметной области:

Диски делятся на четыре типа - игровые, прикладные, видео и музыкальные. Прикладные программы имеют разработчиков, игры, фильмы и музыка различаются по жанрам.

БД должна уметь отвечать на вопросы, подобные следующим:

Сколько в имеется в наличии программного обеспечения и какие из них поставляются поставщиком «1С»?

С кем были заключены договоры на поставки?

На какую сумму закуплена продукция?

Какая продукция дороже 1000 рублей?

План

Введение

Раздел 1. Логическое проектирование

Раздел 2. Физическое и даталогическое проектирование

Часть 1. Проектирование БД в СУБД Visual FoxPro

1.1 Создание проекта

1.2 Создание базы данных

.3 Создание форм

.4 Запросы и отчеты

.4 Главное меню

.5 Создание приложения

Часть 2. SQL

Заключение

Список литературы:

Введение

В настоящее время трудно найти сферу деятельности, в которой не использовались бы базы данных. В общем смысле термин БД можно применить к любой совокупности связанной информации, объединенной вместе по определенному признаку.

Традиционно одной из наиболее распространенных в России и странах СНГ является СУБД «Visual FoxPro». «Visual FoxPro» предоставляет в распоряжение пользователя много самых разнообразных панелей инструментов для работы с базами данных, формами, отчетами и запросами. Эти панели инструментов содержат набор кнопок, причем этот набор зависит от назначения конкретной панели инструментов. Меню, панели инструментов, диалоговые окна Visual FoxPro характерны для среды Windows.

Язык SQL является стандартным реляционным языком и в настоящее время поддерживается практически всеми современными СУБД. Язык SQL является языком программирования, который применяется для организации взаимодействия с базой данных. SQL является декларативным языком, в нем нет операторов цикла или логических операторов, поэтому он обычно встраивается в какой-либо процедурный базовый язык.

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

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

Предметной областью является организация процесса продажи цифровых дисков. Магазин закупает диски у официальных поставщиков в России. Ведется учет всех поставщиков. Каждый поставщик поставляет диски одного типа. Все диски отсортированы по типам и жанрам.

Раздел 1. Логическое проектирование

Логическое проектирование основано на процессе нормализации.

Нормализация - это разбиение таблицы на две или более, обладающих лучшими свойствами при включении, изменении и удалении данных. Окончательная цель нормализации сводится к получению такого проекта базы данных, в котором каждый факт появляется лишь в одном месте, т.е. исключена избыточность информации. Это делается не столько с целью экономии памяти, сколько для исключения возможной противоречивости хранимых данных. Нормализация минимизирует избыточность данных, повышает надежность и стабильность работы с базой данных [1].

Руководство магазина цифровых дисков определило требования, которым должна отвечать база данных, чтобы успешно автоматизировать процесс учета продукции.

БД должна содержать как минимум следующую информацию:

)        Данные поставщиков, ФИО, адрес, юр. название;

)        Название продукта, цену и название компании производителя:

)        Тип, поставляемого цифрового носителя, его объем памяти;

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

Условие нахождения базы данных в первой нормальной форме:

·        таблица не должна иметь повторяющихся записей;

·        в таблице должны отсутствовать повторяющиеся группы полей [1].

Запись синоним слову кортеж.

Кортеж, соответствующий данной схеме отношения, - это множество пар {имя атрибута, значение}, которое содержит одно вхождение каждого имени атрибута, принадлежащего схеме отношения. «Значение» является допустимым значением домена данного атрибута (или типа данных, если понятие домена не поддерживается). Иначе говоря, кортеж - это набор именованных значений заданного типа [1].

Отношение - это множество кортежей, соответствующих одной схеме отношения [1].

Полученное отношение показано в таблице 1.

Таблица 1 - Необходимая информация о цифровых дисках

Код про-дукта

Название продукта

Тип про-дукта

Тип носителя

Объем памяти

Код поста-вщика

Наз-вание поста-вщика

Цена про-дукта

Произ-водитель продукта

1

Microsoft Windows XP

ПО

DVD-R

4,7 Гб

1

1 200р.

Microsoft

2

Microsoft Office

ПО

CD-R

700 Мб

1

700р.

Microsoft

3

Adobe PhotoShop CS

ПО

DVD-R

4,7 Гб

1

900р.

Adobe

4

Adobe After Effects CS

ПО

DVD-R

4,7 Гб

1

900р.

Adobe

5

Живая сталь

Видео

DVD-R

4,7 Гб

2

CDPRO

300р.

Warner brosers

6

Кот в сапогах

Видео

DVD-R

4,7 Гб

2

CDPRO

300р.

Warner brosers

7

Ария

Музыка

CD-R

700 Мб

2

CDPRO

100р.

Ария рекордс

8

Rihanna

Музыка

CD-R

700 Мб

2

CDPRO

100р.

Rihanna

9

Diablo 2

Игры

CD-R

700 Мб

3

Акелла

300р.

Blizard

10

BioShock

Игры

DVD-R

4,7 Гб

3

Акелла

300р.

2K Boston


Вторая нормальная форма требует удаления функциональных зависимостей [1].

Функциональная зависимость. В отношении R атрибут Y функционально зависит от атрибута X (X и Y могут быть составными атрибутами) в том и только в том случае, если каждому значению X соответствует в точности одно значение Y, что в символическом виде можно записать как {R.X} ® {R.Y} [1].

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

В таблице 1 поле «Код поставщика» однозначно определяет поля: «Название поставщика», «Регион поставщика», «Населенный пункт», «Улица», «Дом», «Корпус», «Квартира», «Фамилия», «Имя», «Отчество».

Следовательно, эти 10 полей функционально зависят от ключевого поля «Код поставщика», которое должно иметь уникальные значения. Полученное отношение показано в таблице 2.

Ключ - минимальный набор атрибутов, по значениям которых можно однозначно найти требуемый экземпляр сущности. Минимальность означает, что исключение из набора любого атрибута не позволяет идентифицировать сущность по оставшимся атрибутам [1].

Таблица 2 - Поставщики

Код поставщика

Название постав-щика

Регион поставщика

Населенный пункт

Улица

Дом

Корпус

1

Красноярский край

Красноярск

Тельмана

56

А

2

CDPRO

Ленинградская обл.

Санкт-Петербург

Ленина

120

Б

3

Акелла

Московская обл.

Москва

Пушкина

174

Г


Есть еще два зависимых поля: «Тип носителя» и «Объем памяти», но лицензионные DVD диски, содержащие дополнительные опции к фильмам, имеют размер отличный от стандартного DVD диска, поэтому поле «Тип носителя» не может быть ключевым. Для удобства введем новое уникальное поле «Код типа носителя», полученное отношение показано в таблице 3.

Таблица 3 - Тип носителя

Код типа носителя

Тип носителя

Объем памяти

1

DVD-R

4,7 Гб

2

CD-R

700 Мб


Оставшиеся поля: «Тип продукта», «Жанр», «Цена продукта», «Производитель продукта» функционально зависят от поля «Код продукта», которое имеет уникальные значения. Полученное отношение назовем «Продукция» (таблица 4).

Таблица 4 - Продукция

Код продукта

Название продукта

Тип продукта

Жанр

Цена продукта

Производитель продукта

1

Microsoft Windows XP

ПО

-

1 200р.

Microsoft

2

Microsoft Office

ПО

-

700р.

Microsoft

3

Adobe PhotoShop CS

ПО

-

900р.

Adobe

4

Adobe After Effects CS

ПО

-

900р.

Adobe

5

Живая сталь

Видео

Фантастика

300р.

Warnerbrosers

6

Кот в сапогах

Видео

Мультфильм

300р.

Warnerbrosers

7

Ария

Музыка

Рок

100р.

Ариярекордс

8

Rihanna

Музыка

Поп

100р.

Rihanna

9

Diablo 2

Игры

RPG

300р.

Blizard

10

BioShock

Игры

Shooter

300р.

2K Boston


Третья нормальная форма требует удаления транзитивных (производных) зависимостей.

Транзитивная зависимость определяется следующим образом: если атрибут Z зависит от атрибута X и атрибут Y зависит от атрибута Z, то, следовательно, атрибут Y зависит от атрибута X.

О таблице говорят, что она находится в третьей нормальной форме, если:

·        она удовлетворяет условиям второй нормальной формы;

·        ни одно из неключевых полей не идентифицируется с помощью другого неключевого поля [1].

В отношениях отсутствуют транзитивные зависимости, а это значит, что отношения находятся в третьей нормальной форме.

Поля: «Тип продукта», «Жанр», «Производитель продукта», а также «Регион поставщика», имеют ограниченное количество значений. Поэтому для удобства ввода записей в базу данных и для надежности, выделим эти поля в таблицы - справочники. Для каждого поля вводим уникальные поля. Для поля «Тип продукта» - «Код типа продукта», для поля «Жанр» - «Код жанра», для поля «Регион поставщика» - «Код региона». Полученные отношения показаны в таблицах 5, 6, 7, 8.

Таблица 5 - Тип продукта

Код типа продукции

Тип продукта

1

ПО

2

Видео

3

Музыка

4

Игры


Таблица 6 - Жанр

Код жанра

Жанр

1

Фантастика

2

Мультфильм

3

Рок

4

Поп

5

RPG

6

Shooter


Таблица 7 - Производитель продукта

Код производителя

Производитель продукта

1

Microsoft

2

Adobe

3

Warnerbrosers

4

Ариярекордс

5

Rihanna

6

Blizard

7

2K Boston


Таблица 8 - Регионы

Код региона

Регион

1

Красноярский край

2

Ленинградская обл.

3

Московская обл.


 Спроектирована реляционная база данных, состоящая из семи таблиц:

.        Продукция;

.        Поставщики;

.        Производители;

.        Регионы;

.        Жанр;

.        Тип носителя;

.        Тип продукции.

Таблица «Поставщики» связана с таблицей «Продукция» связью «Один-ко-многим» по ключевому полю «Код поставщика».

Таблица «Производители» связана с таблицей «Продукция» связью «Один-ко-многим» по ключевому полю «Код производителя».

Таблица «Носители» связана с таблицей «Продукция» связью «Один-ко-многим» по ключевому полю «Код типа носителя».

Таблица «Жанр» связана с таблицей «Продукция» связью «Один-ко-многим» по ключевому полю «Код жанра».

Таблица «Тип продукции» связана с таблицей «Продукция» связью «Один-ко-многим» по ключевому полю «Код типа продукции».

Таблица «Регионы» связана с таблицей «Поставщики» связью «Один-ко-многим» по ключевому полю «Код региона».

Схема данных представлена на рисунке 1.

Рисунок 1 - Схема данных

Раздел 2. Физическое и даталогическое проектирование

Часть 1. Проектирование БД в СУБД Visual FoxPro


1.1 Создание проекта


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

Чтобы создать проект, нужно выполнить следующую команду в главном меню: «File» - «New», появится окно создания как показано на рисунке 1, в нем нужно выбрать Project и нажать на кнопку «New File», появится окно сохранения проекта, в нем нужно ввести название проекта и нажать кнопку «Сохранить».

Рисунок 1 - Окно создания новых файлов

После этого появится окно созданного проекта, которое представлено на рисунке 2.

Рисунок 2 - Окно проекта «Магазин дисков

 

1.2 Создание базы данных


Для того чтобы создать базу данных, нужно выполнить следующие действия:

)        В окне проекта на вкладке «Data», либо на вкладке «ALL» выбрать пункт «Databases» и нажать кнопку «New».

)        В появившемся окне можно выбрать способ создания: либо с помощью мастера «Database Wizard», либо с помощью конструктора «New Database». Создадим базу данных с помощью конструктора, нажав кнопку «New Database» (рисунок 3).

Рисунок 3 - Окно выбора способа создания БД

)        В появившемся окне вводим имя базы данных и нажимаем кнопку «Сохранить». После того как база данных будет сохранена, откроется пустое окно созданной базы данных.

Переходим к созданию таблиц.

Для того чтобы создать таблицу выполняем следующее:

)        На вкладке «Data» в списке созданных баз данных «Databases», раскрываем список созданной базы данных. Выбираем пункт таблицы «Tables» и нажимаем кнопку «New». Появляется окно в котором можно выбрать способ создания таблицы: с помощью мастера «Table Wizard» и с помощью конструктора «New Table». Создадим таблицу с помощью конструктора, нажав кнопку «New Table». В следующем окне сохраняем таблицу, указав имя и путь, нажатием кнопки «Сохранить».

)        Появится окно дизайнер таблицы «Table Designer». Создадим поля для таблицы. Для этого на вкладке «Fields» в поле «Name» вводим название поля на английском языке для СУБД Visual FoxPro, но для удобства пользователя, в поле «Caption» вводим название поля на русском языке. Поле «Caption» расположено справа от области создания полей в группе «Display». В поле «Type» выбираем тип данных, которые будет содержать данное поле. Список допустимых типов приведен в таблице 9.

Таблица 9 - Типы данных в Visual FoxPro[1]

Тип

Наименование

Отображаемые данные

Текстовый

Character, Character(binary)

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

Числовой

Integer, Numeric, Float, Double

Integer отображает целые числа. Числовые поля типа Numeric и Float отображают данные с фиксированной точкой. Тип данных Double используется для хранения данных с высокой точностью.

Денежный

Currency

В поле денежного типа могут содержаться числа

Дата

Date

В поле типа Date может содержаться любая дата от 01. 01. 0001 до 31. 12.9999

Дата и время

DateTime

В поле типа DateTime может содержаться любая дата и время от 00:00:00 а.m.. до 11:59:59 р.m.

Логический

Logical

Содержит логическое значение True (.Т.) (Истина) или False (.F.) (Ложь)

Текстовое поле произвольной длины

Memo, Memo(binary)

Memo-поле содержит символьные данные большого объема

Двоичное поле произвольной длины

General

Поле данного типа предназначено для хранения в таблицах изображений и других двоичных данных

Счетчик

Integer (Autoinc)

Число целого типа (с автоматическим увеличением на единицу)


В поле «Width» вводим количество символов. Для типов: Numeric, Float, Double, в поле «Decimal» указывается количество знаков после запятой. Если поле может быть пустым, то нужно поставить галочку в поле «Null». Чтобы сделать поле ключевым, необходимо его проиндексировать. Для этого в раскрывающемся списке «Index» нужно выбрать порядок, в котором будут указываться индексные поля: «Ascending» - обратный порядок, «Descending» - прямой порядок. На рисунке 4 представлена структура таблицы «Поставщики».

Рисунок 4 - Структура таблицы «Поставщики»

)        Затем переходим на вкладку «Indexes». В поле «Order Name» можно сократить название поля для удобства просмотра таблиц в окне базы данных. Из списка «Type» выбираем тип индекса. Для первичного ключа выбираем «Primary». Все типы представлены в таблице 10.

Таблица 10 - Список типов индекса

Тип индекса

Описание

Regular(Обычный)

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

Candidate(Кандидат)

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

Primary(Первичный)

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


Проиндексированные поля таблицы «Поставщики» показаны на рисунке 5. Первичный ключ имеет поле «kod_postavshika».

Рисунок 5 - Проиндексированные поля таблицы «Поставщики»

По умолчанию таблица в СУБД носит имя сохраненного файла, для удобства работы с базой данных можно поменять имя таблицы. Для этого переходим на вкладку «Table» и в поле «Name» вводим имя. Вкладка «Table» изображена на рисунке 6 на примере таблицы «Поставщики».

Рисунок 6 - Информация об имени таблицы «Поставщики»

Аналогичным путем создаем остальные таблицы. На рисунках 7-18 представлены структуры таблиц и их индексы.

Рисунок 7 - Структура таблицы «Жанр»

Рисунок 8 - Проиндексированное поле таблицы «Жанр»

Рисунок 9 - Структура таблицы «Носители»

Рисунок 10 - Проиндексированное поле таблицы «Носители»

Рисунок 11 - Структура таблицы «Продукция»

Рисунок 12 - Проиндексированные поля таблицы «Продукция»

Рисунок 13 - Структура таблицы «Производители»

Рисунок 14 - Проиндексированное поле таблицы «Производители»

Рисунок 15 - Структура таблицы «Регионы»

Рисунок 16 - Проиндексированное поле таблицы «Регионы»

Рисунок 17 - Структура таблицы «Тип продукции»

Рисунок 18 - Проиндексированное поле таблицы «Тип продукции»

Теперь создадим связи между таблицами. Для этого нужно нажать левую кнопку мыши на ключевом поле таблицы и протянуть связь к полю со вторичным ключом родительской таблицы. После создания связи установим целостность данных, для этого дважды щелкаем по связи появляется окно связи (рисунок 18.1)

Рисунок 18.1 - Окно редактирования связи

Нажимаем кнопку «Referential Integrity», появляется окно настройки целостности данных: для обновления «Rules for Updating», для удаления «Rules for Deleting», для вставки «Rules for Inserting». На вкладках обновления и удаления устанавливаем «Cascade», т.е. каскадное обновления данных, для удаления «Restrict» так как изображено на рисунке 18.2.

Рисунок 18.2 - Окно настройки целостности данных

Полученная схема данных представлена на рисунке 1.

1.3 Создание форм


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

Чтобы создать форму в окне проекта на вкладке «Documents» или «ALL» выбираем пункт «Forms» нажимаем кнопку «New». Создадим форму с помощью мастера, нажатием кнопки «Form Wizard». Появится окно, в котором нужно выбрать: либо «Form Wizard» - форма будет содержать информацию одной таблицы, либо «One-to-Many Form Wizard» - создание многотабличной формы на основе связанных таблиц (рисунок 19).

Рисунок 19 - Окно выбора типа формы.

Создадим форму для таблицы «Поставщики», форма будет многотабличной, так как в таблице информация о регионах берется из другой таблицы «Регионы». Выбираем «One-to-Many Form Wizard». Далее выбираем родительскую таблицу, выбираем таблицу «Поставщики», переносим все поля (рисунок 20).

Рисунок 20 - Окно выбора родительской таблицы

Нажимаем кнопку «Next», в следующем окне выбираем связанную таблицу «Регионы» (рисунок 21).

Рисунок 21 - Выбор таблицы для многотабличной формы

В следующем окне выбираем поля по которым таблицы связаны, жмем далее (рисунок 22).

Рисунок 22 - Окно выбора полей, по которым связаны таблицы. Для многотабличной формы.

В следующем окне выбираем стиль формы как показано на рисунке 23, жмем «Next».

Рисунок 23 - Настройка внешнего вида формы.

В следующем окне выбираем поле, по которому будет произведена сортировка. Переносим поле «kod_postavshika» и выбираем сортировку: «Descending» (рисунок 24).

Рисунок 24 - Выбор поля для сортировки данных

Нажимаем «Next» появляется окно завершения создания, в котором представлены варианты, что сделать после сохранения формы, нажимаем «Finish». Появляется окно сохранения формы, вводим название и нажимаем «Cохранить».

Таблица «Регионы» на форме добавлена в виде таблице, что не удобно, да и нарушает визуальный стиль формы. Заменим таблицу компонентом «Combo Box». Для этого выделим в окне проекта созданную форму «Поставщики» и откроем ее в режиме конструктора нажав «Modify». Удалим вложенную таблицу, выделив ее и нажав на клавиатуре клавишу «Delete». В окне «Form Controls» выберем компонент «Combo Box» (рисунок 25).

Рисунок 25 - Панель компонентов «Form Controls»

реляционная база таблица форма

Расположим его на форме, чтобы выводилась информация, необходима подключить к компоненту «Combo Box» необходимое поле. Для этого выделяем компонент, в окне свойств «Properties» в строке «Row Source Type» выбираем, что будет источником, выбираем поле «Fields». Далее выбираем сам источник, в поле «Row Source» выбираем поле таблицы регионы «name_regiona» как показано на рисунке 26.

Рисунок 26 - Окно свойств «Properties»

И для отображения выбираем это же поле в строке «Control Source» (рисунок 27).

Рисунок 27 - Окно свойств «Properties»

Запускаем форму кнопкой «Run» на панели инструментов. Аналогично создаем формы для остальных таблиц. На форму можно добавлять изображения. Для этого размещаем на форме компонент «Image» и в окне свойств выбираем пункт «Picture», в котором указываем путь к изображению. Если изображение большое, не влезает на форму нужно в свойствах в поле «Stretch» выбрать: «Stretch»-растянуть по размеру компонента «Image», «Isometric» - подогнать под размер компонента, но сохраняя пропорции.

После того как созданы все формы, заполняем таблицы данными.

На рисунках 28-33 изображены формы в режиме выполнения.

Рисунок 28 - Форма «Поставщики»

Рисунок 29 - Форма «Регионы»

Рисунок 28 - Форма «Продукция»

Рисунок 30 - Форма «Жанр»

Рисунок 31 - Форма «Носители»

Рисунок 32 - Форма «Производители»

Рисунок 33 - Форма «Тип_продукции»

На рисунках 34-40 изображены таблицы в режиме «Browse»

Рисунок 34 - Таблица в режиме «Browse» «Жанр»

Рисунок 35 - Таблица в режиме «Browse» «Носители»

Рисунок 36 - Таблица в режиме «Browse» «Поставщики»

Рисунок 37 - Таблица в режиме «Browse» «Продукция»

Рисунок 38 - Таблица в режиме «Browse» «Производители»

Рисунок 39 - Таблица в режиме «Browse» «Регионы»

Рисунок 40 - Таблица в режиме «Browse» «Тип_продукта»

1.4 Запросы и отчеты


Для создания запроса в окне проекта, на вкладке «Data» выбираем пункт «Queries» нажимаем «New», «New Query» откроется конструктор запросов. Добавляем необходимые таблицы, выполнив команду «Query», «Add Table», или в поле окна конструктора вызвать контекстное меню и выбрать «Add Table». В появившемся окне выбираем таблицу и нажимаем «Add» рисунок 41.

Рисунок 41 - Окно добавления таблиц

На вкладке «Fields» выбираем поля выводимые в отчете (рисунок 42). На вкладке «Join» задается условие объединения таблиц. На вкладке «Filter» задаем условие выборки данных (рисунок 43).

Рисунок 42 - Окно конструктора запросов

Рисунок 43 - Вкладка «Filter». Условие запроса

Создать запрос: выбрать продукцию, поставленную поставщиком «1С».

Результат запрос на продукцию, поставленную поставщиком «1C» представлен на рисунке 44. SQL код запроса:

Продукция.name_producta, Тип_продукции.name_type,;

Поставщики.name_postavshika, Поставщики.f, Поставщики.i, Поставщики.o;

FROM ;

диски!тип_продукции ;

INNER JOIN диски!продукция ;

ON Тип_продукции.type_producta = Продукция.type_producta ;

INNER JOIN диски!поставщики ;

ON Поставщики.kod_postavshika = Продукция.kod_postavshika;

WHERE Поставщики.name_postavshika = ( "1С" );

 HAVING Тип_продукции.name_type = ( "ПО" )

Рисунок 44 - Результат выполнения запроса

Создать запрос: выбрать информацию о продукции, поставленной на DVD носителях.

Результат запроса на выборку продукции поставленной на DVD носителях представлен на рисунке 45. SQL код запроса:

Продукция.name_producta, Тип_продукции.name_type, Жанр.janr,;

Поставщики.name_postavshika, Продукция.cena, Носители.name;

FROM ;

диски!тип_продукции ;

INNER JOIN диски!продукция ;

ON Тип_продукции.type_producta = Продукция.type_producta ;

INNER JOIN диски!носители ;

ON Носители.type_nositela = Продукция.type_nositela ;

INNER JOIN диски!поставщики ;

ON Поставщики.kod_postavshika = Продукция.kod_postavshika ;

INNER JOIN диски!жанр ;

ON Жанр.kod_janra = Продукция.kod_janra;

 WHERE Носители.name = ( "DVD" )

Рисунок 45 - Результат выполнения запроса

Рисунок 45.1 - Условие запроса

Создать запрос: выбрать из всей продукции программное обеспечение, цена которого больше 700 рублей.

Результат запроса на выборку только программного обеспечения, цена которого больше 700 рублей представлен на рисунке 46. SQL код запроса:

Продукция.name_producta, Носители.name, Носители.razmer,;

Поставщики.name_postavshika, Продукция.cena;

FROM ;

диски!носители ;

INNER JOIN диски!продукция ;

ON Носители.type_nositela = Продукция.type_nositela ;

INNER JOIN диски!тип_продукции ;

ON Тип_продукции.type_producta = Продукция.type_producta ;

INNER JOIN диски!поставщики ;

ON Поставщики.kod_postavshika = Продукция.kod_postavshika;

WHERE Тип_продукции.name_type = ( "ПО" );

 AND Продукция.cena > ( 700 )

Рисунок 46 - Результат выполнения запроса

Рисунок 46.1 - Условие запроса

Создание отчета.

Для того чтобы создать отчет, нужно на вкладке «Documents» выделить пункт «Reports» и нажать клавишу «New». Если отчет создается с помощью мастера, то необходимо выбрать однотабличный или многотабличный, в этом случае отчет будет автоматически сформирован. Если создается с помощью конструктора, то необходимо выполнить следующее:

)        Добавить необходимые таблицы, в среду окружения, нажав кнопку на панели инструментов «Data Environment».

)        После чего разместить поля. Для этого на панели инструментов «Report Controls» выбираем компонент «Fields». Разместив его на форме, появится окно, в котором в поле «Expression» указываем поле таблицы, данные которой необходимо включить в отчет (рисунок 47).

Рисунок 47 - Окно свойств компонента поле

Многотабличный отчет о поставщиках показан на рисунке 48 в режиме просмотра.

Рисунок 48 - Отчет о поставщиках в режиме просмотра

Рисунок 48.1 - Отчет о поставщиках в режиме конструктора

На рисунке 49 изображен многотабличный отчет о имеющейся продукции. Используются три таблицы:

)        «Продукция»;

)        «Поставщики»;

)        «Тип продукции»

Рисунок 49 - Отчет о продукции в режиме просмотра

На рисунках 50 и 51 представлен отчет, в котором подсчитывается сумма, на которую закуплена продукция.

Рисунок 50 - Фрагмент отчета. Начало

Рисунок 51 - Фрагмент отчета. Окончани

Рисунок 51.1 - Вычисляемое поле. Вычисляет стоимость закупки

1.4 Главное меню


В окне конструктора меню в поле «Prompt» нужно ввести наименования пунктов меню. Раскрывающийся список «Result» используется для указания типа пункта меню. В списке «Menu level» указывается уровень текущего меню. В таблице 11 описаны типы пунктов меню.

Таблица 11 - Типы меню [1]

Тип меню

Назначение

Command (Команда)

При выборе пункта меню данного типа будет выполняться связанная с ним команда

Pad Name (Наименование строки меню)

При выборе пункта меню никаких действий выполняться не будет. Как правило, используется в качестве дополнительного пояснения к меню

Submenu (Подменю)

При выборе пункта меню раскрывается связанное с данным пунктом ниспадающее меню

Procedure (Процедура)

При выборе пункта меню вызывается процедура, определенная для данного пункта меню


Создадим три пункта раскрывающихся пунктов, в которых будут пункты с командами вызова запросов и отчетов.

Рисунок 52 - Окно создание главного меню. Перечень выпадающих пунктов

Рисунок 52.1 - Окно создание главного меню. Перечень пунктов команд

Команды вызова запросов:

)        «1С» - DO "d:\файлы и программы\бд\query1.qpr";

)        «DVD» - DO "d:\файлы и программы\бд\query2.qpr";

)        «Сумма» - DO "d:\файлы и программы\бд\query3.qpr";

Рисунок 52.2 - Окно создание главного меню. Перечень пунктов команд

Команды вызова отчетов:

)        «Поставщики» - REPORT FORM "d:\файлы и программы\бд\бд\поставщики.frx" PREVIEW

)        «Продукция» - REPORT FORM "d:\файлы и программы\бд\бд\продукция.frx" PREVIEW

)        «Сумма закупки» - REPORT FORM "d:\файлы и программы\бд\бд\сумма.frx" PREVIEW

После того как созданы все необходимые пункты меню, меню нужно сгенерировать. В меню «Menu» нужно выбрать команду «Generate». Откроется диалоговое окно «Generate Menu». В поле «Output File» вводится имя файла, который будет создан в результате генерации. Для запуска генерации описания меню нажимается кнопка «Generate».

Рисунок 52.3 - Главное меню

Рисунок 52.4 - Главное меню

1.5 Создание приложения


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

Рисунок 53 - Главная кнопочная форма

Рисунок 53.1 - Форма с закладками, на которых расположены таблицы

Рисунок 54 - Форма запуска запросов

Рисунок 55 - Форма запуска отчетов

Перед построением приложения зададим главную форму, выделив ее и в пункте главного меню «Project» ставим галочку у пункта «Set Main». В окне проекта нажимаем «Build» в окне выбираем с расширением «App» (рисунок 56).

Рисунок 56 - Форма построения приложения

Сохраняем, приложение автоматически запустится если был выбран пункт «Run After Build»

Часть 2. SQL

Язык SQL является стандартным реляционным языком и в настоящее время поддерживается практически всеми современными СУБД. SQL - это сокращенное название языка Structured Query Language. Язык SQL является языком программирования, который применяется для организации взаимодействия с базой данных. Он сочетает средства SDL и DML, т.е. позволяет определять схему реляционной БД и манипулировать данными. SQL является декларативным языком, в нем нет операторов цикла или логических операторов, поэтому он обычно встраивается в какой-либо процедурный базовый язык.[1]

SQL реализует все функциональные возможности, которые СУБД предоставляет пользователю, а именно:

·        Организация данных. SQL дает пользователю возможность изменять структуру представления данных.

·        Чтение данных. SQL дает пользователю или приложению возможность выбирать из базы данных содержащиеся в ней данные и пользоваться ими.

·        Обработка данных. SQL дает возможность пользователю или приложению возможность изменять базу данных, т.е. добавлять в нее новые данные, а также удалять или обновлять уже имеющиеся в ней данные.

·        Управление доступом. С помощью SQL можно ограничить возможности пользователя по чтению или изменению данных и защитить их от несанкционированного доступа.

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

·        Целостность данных. SQL позволяет обеспечить целостность базы данных.[1]

Создадим базу данных с названием «CDSHOP»:

CREATE DATABASE CDSHOP;

Рисунок 57 - Создание базы данных «CDSHOP»

Теперь создаем таблицы:

Создаем таблицу поставщики «postavshiki»:

CREATE TABLE CDSHOP.postavshiki(kod_postavshika INTEGER(11) NOT NULL, nazvanie VARCHAR(255) NOT NULL, familia VARCHAR(255) NOT NULL, imya VARCHAR(255) NOT NULL, otchestvo VARCHAR(255) NOT NULL, strana VARCHAR(255) NOT NULL, kod_regiona INTEGER(11) NOT NULL, PRIMARY KEY (kod_postavshika), UNIQUE INDEX (kod_postavshika), INDEX (kod_regiona)); NULL - означает что поле не может быть пустым. Если при добавлении данных в таблицу, такое поле оставить пустым, программа сообщит об ошибке.

PRIMARY KEY - задает первичный ключ таблицы.

UNIQUE INDEX - задает уникальное поле, значения которого не могут повторяться.

INDEX - задает поля, которые будут проиндексированы.

Индексация полей полезна для ускорения работы команды SELECT

Рисунок 58 - Создание таблицы «postavshiki»

Создаем таблицу «regiony»:

CREATE TABLE CDSHOP.regiony(kod_regiona INTEGER(11) NOT NULL, nazvanie_regiona VARCHAR(255) NOT NULL, PRIMARY KEY (kod_regiona));

Рисунок 59 - Создание таблицы « regiony»

Создаем таблицу «proizvoditely»:

CREATE TABLE CDSHOP.proizvoditely( kod_proizvoditela INTEGER(11) NOT NULL, nazvanie_proizvoditela VARCHAR(255) NOT NULL, PRIMARY KEY (kod_proizvoditela));

Рисунок 60 - Создание таблицы « proizvoditely »

Создаем таблицу « nositely »:

CREATE TABLE CDSHOP.nositely( kod_nositela INTEGER(11) NOT NULL, tip_nositela VARCHAR(255) NOT NULL, razmer FLOAT(6, 3) NOT NULL, PRIMARY KEY (kod_nositela));

Рисунок 61 - Создание таблицы « nositely »

Создаем таблицу «janr»:

CREATE TABLE CDSHOP.janr( kod_janra INTEGER(11) NOT NULL, janr VARCHAR(255) NOT NULL, PRIMARY KEY (kod_janra));

Рисунок 62 - Создание таблицы «janr»

Создаем таблицу «tip_produkcii»:

CREATE TABLE CDSHOP.tip_produkcii( kod_tipa INTEGER(11) NOT NULL, name_tipa VARCHAR(255) NOT NULL, PRIMARY KEY (kod_tipa));

Рисунок 63 - Создание таблицы «tip_produkcii»

Создаем таблицу « produkt »:

CREATE TABLE CDSHOP.produkt( kod_produkta INTEGER(4) NOT NULL, nazvanie VARCHAR(50) NOT NULL, tip_produkta INTEGER(4) NOT NULL, kod_janra INTEGER(4) NOT NULL, kod_nositela INTEGER(4) NOT NULL, cena FLOAT(8,3) NOT NULL, kod_postavshika INTEGER(4) NOT NULL, kod_proizvoditela INTEGER(4) NOT NULL, PRIMARY KEY (kod_produkta), INDEX (kod_janra), INDEX (kod_postavshika), UNIQUE INDEX (kod_produkta), INDEX (kod_proizvoditela), INDEX (kod_nositela));

Рисунок 64 - Создание таблицы «produkt»

Заполнение таблиц данными.

INSERT INTO CDSHOP.postavshiki (

kod_postavshika, nazvanie, familia, imya, otchestvo, strana, kod_regiona

)VALUES(

,'1C', ‘Petrov’, ‘Aleksey’, ‘Ivanovich’, ‘Krasnoyarsk’, 3

), (

,'CDPro', ‘Ivanov’, ‘Petr’, ‘Ivanovich’, ‘Sankt-Peterburg’, 2

), (

,'Akella', ‘Kozlov’, ‘Ivan’, ‘Alekseevich’, ‘Moskva’, 1); - производит вставку новых строк в таблицу.

Рисунок 65 - Вставка данных в таблицу «postavshiki»

Заполним таблицу «regiony».

INSERT INTO CDSHOP. regiony (

kod_regiona , nazvanie_regiona )VALUES(

1, ‘Moskovskaya oblast’

), (

, ‘Leningradskaya oblast’

), (

, ‘Krasnoyarskiy kray’);

Рисунок 66 - Вставка данных в таблицу «regiony»

INSERT INTO CDSHOP. proizvoditely (_proizvoditela, nazvanie_proizvoditela

)VALUES(

1, ‘Microsoft’

), (

, ‘Adobe’

), (

, ‘Blizard’

), (

, ‘2K Boston ’);

Рисунок 66 - Вставка данных в таблицу «proizvoditely»

Заполним таблицу « nositely ».

INSERT INTO CDSHOP.nositely (_nositela, tip_nositela, razmer

)VALUES(

1, ‘DVD’, 4.7

), (

, ‘CD’, 0.7);

Рисунок 67 - Вставка данных в таблицу «nositely»

Заполним таблицу « janr».INTO CDSHOP. janr (_janra, janr)VALUES(

1, ‘Fantastika’), (

, ‘Multfilm’), (

, ‘Rock’), (

, ‘Pop’), (

, ‘RPG’), (

, ‘Action’),(

, ‘-’);

Рисунок 68 - Вставка данных в таблицу «janr»

Заполним таблицу « tip_produkcii».INTO CDSHOP.tip_produkcii (_tipa, name_tipa)VALUES(

1, ‘PO’), (

, ‘Video’), (

, ‘Musika’), (

, ‘Game’);

Рисунок 69 - Вставка данных в таблицу «tip_produkcii»

Заполним таблицу « produkt ».INTO CDSHOP. produkt (_produkta, nazvanie, tip_produkta, kod_janra, _nositela, cena, kod_postavshika, kod_proizvoditela

)VALUES(

1, ‘Microsoft Windows XP’, 1, 7, 2, 1200, 0, 1), (

, ‘Adobe PhotoShop CS5’, 1, 7, 1, 900, 0, 2), (

, ‘Jivaya Stal’, 2, 1, 1, 300, 1, 1), (

, ‘Ariya’, 3, 3, 2, 100, 1, 1), (

, ‘Diablo 2’, 5, 5, 2, 200, 2, 3);

Рисунок 70 - Вставка данных в таблицу «produkt»

Просмотрим полученные таблицы.

Выберем все записи таблицы «postavshiki»:* FROM CDSHOP.postavshiki; - выборка всех полей из таблицы «postavshiki».

Рисунок 71 - Таблица «postavshiki»

Выберем все записи таблицы «regiony»:

SELECT * FROM CDSHOP. regiony;

Рисунок 72 - Таблица «regiony»

Выберем все записи таблицы «proizvoditely»:

SELECT * FROM CDSHOP. proizvoditely;

Рисунок 73 - Таблица «proizvoditely»

Выберем все записи таблицы «nositely»:

SELECT * FROM CDSHOP. nositely;

Рисунок 74 - Таблица «nositely»

Выберем все записи таблицы «janr»:

SELECT * FROM CDSHOP. janr;

Рисунок 75 - Таблица «janr»

Выберем все записи таблицы «tip_produkcii»:

SELECT * FROM CDSHOP. tip_produkcii;

Рисунок 76 - Таблица «tip_produkcii»

Выберем все записи таблицы «produkt»:

SELECT * FROM CDSHOP.produkt;

Рисунок 77 - Таблица «produkt»

Запросы.

Создать запрос: выбрать продукцию, поставленную поставщиком «1С».

В запросе участвуют таблицы: «produkt», «tip_produkcii», «postavshiki».

SELECT CDSHOP.produkt.nazvanie, CDSHOP.tip_produkcii.name_tipa, CDSHOP.postavshiki.nazvanie

FROM CDSHOP.produkt, CDSHOP.tip_produkcii, CDSHOP.postavshikiCDSHOP.produkt.tip_produkta= CDSHOP.tip_produkcii.kod_tipa AND CDSHOP.produkt.kod_postavshika=CDSHOP.postavshiki.kod_postavshika AND CDSHOP.postavshiki.nazvanie=’1C’;

Условиями: «CDSHOP.produkt.tip_produkta= CDSHOP.tip_produkcii.kod_tipa» и «CDSHOP.produkt.kod_postavshika=CDSHOP.postavshiki.kod_postavshika» ищем совпадения значений данных таблиц, для определения какие записи одной таблицы соответствуют записям другой;.postavshiki.nazvanie=’1C’ - ищем значения поля «nazvanie» равное «1С»

Рисунок 78 - Результат выполнения запроса. Выбрать поставки от «1С»

Создать запрос: выбрать информацию о продукции, поставленной на DVD носителях.

SELECT CDSHOP.produkt.nazvanie, CDSHOP.tip_produkcii.name_tipa, CDSHOP.postavshiki.nazvanie, CDSHOP.nositely. tip_nositela, CDSHOP.nositely.razmer

FROM CDSHOP.produkt, CDSHOP.tip_produkcii, CDSHOP.postavshiki, CDSHOP.nositely

WHERE CDSHOP.produkt.tip_produkta= CDSHOP.tip_produkcii.kod_tipa AND CDSHOP.produkt.kod_postavshika=CDSHOP.postavshiki.kod_postavshika AND CDSHOP.produkt.kod_nositela=CDSHOP.nositely.kod_nositela AND CDSHOP.nositely.tip_nositela = ‘DVD’;

Рисунок 79 - Результат выполнения запроса. Выбрать продукцию на DVD носителях

Создать запрос: выбрать из всей продукции программное обеспечение, цена которого больше 700 рублей.

SELECT CDSHOP.produkt.nazvanie, CDSHOP.produkt.cena, CDSHOP.tip_produkcii.name_tipa, CDSHOP.postavshiki.nazvanie, CDSHOP.nositely. tip_nositela, CDSHOP.nositely.razmer

FROM CDSHOP.produkt, CDSHOP.tip_produkcii, CDSHOP.postavshiki, CDSHOP.nositely

WHERE CDSHOP.produkt.tip_produkta= CDSHOP.tip_produkcii.kod_tipa CDSHOP.produkt.kod_postavshika=CDSHOP.postavshiki.kod_postavshika CDSHOP.produkt.kod_nositela=CDSHOP.nositely.kod_nositela CDSHOP. tip_produkcii.name_tipa = ‘PO’ CDSHOP.produkt.cena>700;

Рисунок 80 - Результат выполнения запроса. Выбрать программное обеспечение по цене дороже 700 руб.

Заключение

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

Была изучена СУБД «Visual FoxPro», с помощью которого была разработана база данных для автоматизации работы магазина цифровых дисков. Были созданы все таблицы в соответствии с заданием. Для управления базой данных для таблиц были созданы формы, а также запросы, отчеты.

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

Эта же база данных была создана в «MySQL Command Line Client». В ходе создания базы данных были получены навыки использования запросов структурного языка SQL.

Список литературы:

1.      Кокова В.И. Базы данных [Текст]: учебное пособие / В.И. Кокова. -Красноярск.: КГТУ, 2005. - 164 c.

2.      FoxPro Club [Электронный ресурс] - Режим доступа: http://www.foxclub.ru/

3.      SQL.ru [Электронный ресурс] - Режим доступа: <http://www.sql.ru/>

Похожие работы на - Проектирование реляционной БД с помощью нормализации

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!