Базы данных лаборатории хлебной базы

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    171,43 Кб
  • Опубликовано:
    2012-08-29
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Базы данных лаборатории хлебной базы

Оглавление

Определения, обозначения и сокращения

Введение

. Техническое задание

.1 Основания для разработки

.2 Задание

. Технический проект

.1 Неформализованное описание предметной области

.2 Словарь понятий и терминов

.3 Структура таблиц базы данных

.4 Диаграмма сущность-связь для предметной области на логическом уровне

.5 Ограничения на связи между таблицами базы данных хлебной базы

.5.1 Функциональные зависимости для сущности groats

.5.2 Функциональные зависимости для сущности laborants

.5.3 Функциональные зависимости для сущности silo

.5.4 Функциональные зависимости для сущности transport

.5.5 Функциональные зависимости для сущности grain_elevator

.5.6 Функциональные зависимости для сущности reseivs

.5.7 Функциональные зависимости для сущности dispatch

.5.8 Функциональные зависимости для сущности analysis card

.5.9 Ограничения, накладываемые на связи между сущностями

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

.1 Исходное множество функциональных зависимостей

.2 Неизбыточное покрытие множества ФЗ

.3 Леворедуцированное покрытие множества ФЗ

.4 Праворедуцированное покрытие множества ФЗ

.5 Минимальное покрытие

.6 Редуцированное минимальное кольцевое покрытие

. Оптимизация запросов к базе данных

.1 Статистика по таблицам базы данных

.2 Многотабличный запрос на выборку по условию

.2.1 Выражение для запроса с использованием реляционной алгебры

.2.2 Исходное операционное дерево для запроса

.2.3 Оптимизированное операционное дерево для запроса

.2.4 Исходный запрос на языке SQL

.2.5 Оптимизированный запрос на языке SQL

.2.6 Расчет сложности запроса

.3 Многотабличный запрос на выборку по условию

.3.1 Выражение для запроса с использованием реляционной алгебры

.3.2 Исходное операционное дерево для запроса

.3.3 Оптимизированное операционное дерево для запроса

.3.4 Исходный запрос на языке SQL

.3.5 Оптимизированный запрос на языке SQL

.3.6 Расчет сложности запроса

Заключение

Список использованных источников

Введение

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

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

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

1.  Техническое задание

1.1 Основания для разработки

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

1.2 Задание

Спроектировать базу данных для лаборатории хлебной базы. Описать предметную область, разработать словарь понятий и терминов, построить систему функциональных зависимостей. Синтезировать схему базы данных на основании функциональных зависимостей (построение неизбыточного покрытия, построение леворедуцированного неизбыточного покрытия, построение праворедуцированного неизбыточного покрытия, построение классов эквивалентностей, построение минимального покрытия). Построить уточненную концептуальную модель в виде ER-диаграммы, запросы предметной области. Записать минимизированные запросы на языке SQL. Рассчитать сложность запросов.

2.  Технический проект

2.1    Неформализованное описание предметной области

Хлебная база представляет собой предприятие, основу деятельности которого составляет приемка, хранение и транспортировка круп различного вида и сорта. Крупы отличаются по названию, назначению (виду), сорту, году урожая и месту урожая. Крупы распределяются по партиям, каждая из которых включает крупу только определенного вида, сорта, года урожая и места урожая. Партии круп хранятся на элеваторах. Элеватор характеризуется определенным объемом вместимости и состоит из более мелких по объему хранилищ - силосов. В каждом силосе хранится только одна определенная партия крупы. Каждую партию крупы отправляют на анализ в лабораторию. Все виды лабораторных анализов круп осуществляют лаборанты. Каждый лаборант заполняет лабораторную карту для каждой партии крупы, в которой определяется принадлежность ее к сорту и назначению.

2.2    Словарь понятий и терминов

В описанной предметной области можно выделить следующие сущности:

Словарь терминов для объектов и элементов данных таблицы «Groats» представлен в таблице 1.

Таблица 1  Крупа - Groats

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

Кратко

Значение

Тип (точность)

Название

Name

Овёс

Character

Назначение

Needs

Кормовой

Character

Сорт

Sort

3

Int

Год урожая

Year

2010

Int

Место урожая

Place

Курская область

Character

Номер партии

Num_part

12

Int


Словарь терминов для объектов и элементов данных таблицы «Silo» представлен в таблице 2.

Таблица 2  Силос - Silo

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

Кратко

Значение

Тип (точность)

Номер

Number_s

123

Int

Вместимость

Lim_weight_s

500

Int

Занято

Weight_s

100

Int

Какой крупой

Name_groat

Ячмень

Character

Какого типа

Type_groat

Пивоваренный

Character

Номер элеватора

Num_elev

1

Int


Словарь терминов для объектов и элементов данных таблицы «grain_elevator» представлен в таблице 3.

Таблица 3  Элеватор - grain_elevator

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

Кратко

Значение

Тип (точность)

Номер

Number_el

2

Int

Вместимость

Lim_weight_el

10000

Int

Занято

Weight_el

5000

Int


Словарь терминов для объектов и элементов данных таблицы «Transport» представлен в таблице 4.

Таблица 4  Транспорт - Transport

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

Кратко

Значение

Тип (точность)

Номер

Num

14

Int

Смена

Hours

2

Int

Вместимость

Lim_weight_c

250

Int


Словарь терминов для объектов и элементов данных таблицы «Dispatch» представлен в таблице 5.

Таблица 5  Отправка - Dispatch

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

Кратко

Значение

Тип (точность)

Номер партии

Num_part

513

Int

Номер машины

Num_trans

16

Int

Пункт назначения

Destin

Щигры

Character

Смена

Hours

2

Int

Крупа

Name_groat

Рис

Character

Дата

Data

12.06.2010

Date


Словарь терминов для объектов и элементов данных таблицы «Reseivs» представлен в таблице 6.

Таблица 6  Получение - Reseivs

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

Кратко

Значение

Тип (точность)

Номер партии

Num_part

156

Int

Номер машины

Num_trans

13

Int

Откуда

From

Черемисиново

Character

Смена

Hours

2

Int

Крупа

Name_groat

Пшеница

Character

Дата

Data

15.07.2010

Date

Номер силоса

Num_sil

516

Int


Словарь терминов для объектов и элементов данных таблицы «Analysis card» представлен в таблице 7.

Таблица 7  Анализная карточка - Analysis card

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

Кратко

Значение

Тип (точность)

Номер карточки

Num_card

1569

Int

Дата анализа

Date_an

13.08.2010

Date

Название крупы

name_groat

Овёс

Character

Смена

Type_groat

Продовольственный

Character

Крупа

Year

2009

Int

Дата

Place

Поныри

Character

Фамилия лаборанта

Lastname_lab

Меркулова

Character

Табельный номер

Tab_num_lab

164

Int


Словарь терминов для объектов и элементов данных таблицы «Laborants» представлен в таблице 8.

Таблица 8  Лаборанты - Laborants

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

Кратко

Значение

Тип (точность)

Табельный номер

Tab_num_lab

164

Int

Фамилия лаборанта

Lastname_lab

Меркулова

Character

Имя

Name

Галина

Character

Отчество

Secondname

Павловна

Character

Дата рождения

Birth_date

28.01.1976

Date


Словарь терминов для объектов и элементов данных таблицы «Current_elevator» представлен в таблице 9.

Таблица 9  Текущая заполненность элеваторов - Current_elevator

НаименованиеКраткоЗначениеТип (точность)




Дата

Date

12.01.2010

Date

Занято

Occupied

500

Int

Номер элеватора

Number_el

4

Int


2.3    Структура таблиц базы данных

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

Структура таблицы Dispatch представлена в таблицах 10-11.

Таблица 10 

Таблица 11         Структура таблицы Dispatch

Название поля

Размер

Тип

NUM_PART

4

Integer

NUM_TRANS

4

Integer

DESTIN

40

Character

HOURS

4

Integer

NAME_GROAT

40

Character

DATA

10

Date


Таблица 12  Ключи в таблице Dispatch

Название

Тип

Выражение

num_part

Primary

num_part

num_trans

Regular

num_trans

hourrs

Regular

hours


Структура таблицы Silo представлена в таблицах 12-13.

Таблица 13  Структура таблицы Silo

Название поля

Размер

Тип

number_s

4

Integer

lim_weight_s

4

Integer

weight_s

Integer

name_groat

40

Character

type_groat

40

Character

num_elev

4

Integer

num_part

12

Integer


Таблица 14  Ключи в таблице Silo

Название

Тип

Выражение

num_sil

Primary

number_s

num_elev

Candidate

num_elev

num_part

Regular

num_part


Структура таблицы grain_elevator представлена в таблицах 14-15.

Таблица 15 

Таблица 15 Структура таблицы grain_elevator

Название поля

Размер

Тип

number_el

4

Integer

lim_weight_el

4

Integer


Таблица 16  Ключи в таблице grain_elevator

Название

Тип

Выражение

num_el

Primary

number_el


Структура таблицы Transport представлена в таблицах 16-17.

Таблица 17  Структура таблицы Transport

Название поля

Размер

Тип

num

4

Integer

hours

4

Integer

lim_weight_c

4

Integer


Таблица 18  Ключи в таблице Transport

Название

Тип

Выражение

numb

Primary

num

Hours

Regular

hours


Структура таблицы Receivs представлена в таблицах 18-19.

Таблица 19  Структура таблицы Receivs

Название поля

Размер

Тип

num_part

4

Integer

num_trans

4

Integer

from

40

Character

hours

4

Integer

name_groat

40

Character

dat

10

Date

num_sil

4

Integer

Таблица 20 

Таблица 20 Ключи в таблице Receivs

Название

Тип

Выражение

num_sil

Regular

num_sil

num_part

Primary

num_part

num_trans

Regular

num_trans

hours

Regular

hours


Структура таблицы Groats представлена в таблицах 20-21.

Таблица 21  Структура таблицы Groats

Название поля

Размер

Тип

nam

40

Character

needs

40

Character

sort

4

Integer

place

40

Character

num_part

4

Integer


Таблица 22  Ключи в таблице Groats

Название

Тип

Выражение

num_part

Primary

num_part


Структура таблицы Laborants представлена в таблицах 22-23.

Таблица 23  Структура таблицы Laborants

Название поля

Размер

Тип

tab_num

125

Integer

lastname

40

Character

name

40

Character

secondname

40

Character

birth_date

10

Date


Таблица 24  Ключи в таблице Laborants

Название

Тип

Выражение

tab_num

Primary

tab_num


Структура таблицы current_elevator представлена в таблицах 24-25.

Таблица 25  Структура таблицы current_elevator

Название поля

Размер

Тип

data

10

Date

occupied

4

Integer

number_el

4

Integer


Таблица 26  Ключи в таблице current_elevator

Название

Тип

Выражение

data

Primary

data

num_el

Regular

number_el


2.4    Диаграмма сущность-связь для предметной области на логическом уровне

Диаграмма сущность-связь для предметной области базы данных лаборатории хлебной базы, разработанная с помощью ErWIN, показана на рисунке 1.

Рисунок 1 - Диаграмма сущность-связь

.5      Ограничения на связи между таблицами базы данных хлебной базы

2.5.1           Функциональные зависимости для сущности groats

Нельзя, чтобы одна партия зерна содержала зерно разного вида;

Num_part->nam;

Нельзя, чтобы одна партия зерна содержала зерно разного типа;

Num_part->needs;

Нельзя, чтобы одна партия зерна содержала зерно разного сорта;

Num_part->sort

Нельзя, чтобы одна партия зерна содержала зерно из различных мест сбора урожая;

Num_part->place;

Нельзя, чтобы одна партия зерна содержала зерно разного года сбора урожая;

Num_part->year;

2.5.2           Функциональные зависимости для сущности laborants

У разных лаборантов не может быть один и тот же табельный номер;

Tab_numb->lastname, name, secondname, birthdate

2.5.3           Функциональные зависимости для сущности silo

Нельзя, чтобы в 1 и том же силосе хранилась крупа более чем одного сорта;

Num_sil->sort_groat

Нельзя, чтобы в 1 и том же силосе хранилась крупа более чем 1 назначения;

Num_sil->needs

Нельзя, чтобы в 1 и том же силосе хранилась крупа более чем 1 типа.

Num_sil->type_groat

2.5.4           Функциональные зависимости для сущности transport

Одна и та же машина не может иметь разную предельную вместимость;

Num->lim_weight_c

Одна и та же машина не может работать одновременно в разные смены;

Num->hours

2.5.5           Функциональные зависимости для сущности grain_elevator

Один и тот же элеватор не может иметь различный предельный объем заполнения

Number_el->lim_weight_el

Один и тот же элеватор не может иметь в один и тот же момент времени различный объем фактического заполнения

Number_el-> weight_el

2.5.6          

2.5.6  Функциональные зависимости для сущности reseivs

Одна и та же машина не может привозить разные партии зерна;

Num_part->num_trans

Нельзя, чтобы 1 и та же машина привозила в один и тот же день партии крупы разного вида;

Num_part, Num_trans, data->name_groat

Нельзя, чтобы 1 и та же машина привозила в один и тот же день партии крупы из разных мест сбора урожая;

Num_part, Num_trans, data->from

Нельзя, чтобы 1 и та же машина привозила в один и тот же день одну партию крупы в разные смены;

Num_part, Num_trans, data->hours

2.5.7 Функциональные зависимости для сущности dispatch

Одна и та же машина не может увозить разные партии зерна;

Num_part->num_trans

Нельзя, чтобы 1 и та же машина увозила в один и тот же день партии крупы разного вида;

Num_part, Num_trans, data->name_groat

Нельзя, чтобы 1 и та же машина увозила в один и тот же день партии крупы в разные места назначения;

Num_part, Num_trans, data->destin

Нельзя, чтобы 1 и та же машина увозила в один и тот же день одну партию крупы в разные смены;

Num_part, Num_trans, data->hours

2.5.8           Функциональные зависимости для сущности analysis card

Одна и та же анализная карточка не может быть заполнена в разные дни;

Num_card->date_an

Одна и та же анализная карточка не может быть заполнена для разного вида крупы;

Num_card ->name_groat

Одна и та же анализная карточка не может быть заполнена для разного типа крупы;

Num_card ->type_groat

Одна и та же анализная карточка не может быть заполнена для крупы разных лет сбора урожая;

Num_card ->year

Одна и та же анализная карточка не может быть заполнена для крупы из разных мест сбора урожая;

Num_card ->place

Одна и та же анализная карточка не может быть заполнена более чем одним лаборантом в один и тот же день.

Num_card ->tab_nam_lab, lastname_lab

2.5.9           Ограничения, накладываемые на связи между сущностями

Разные лаборанты не могут заполнить одну и ту же анализную карточку с одним и тем же номером в один и тот же день.

Num_card-> Tab_num_lab, date_an_num_lab ->Num_card, date_an

Нельзя, чтобы в 1 и тот же силос привозилась крупа более чем 1 типа;

Number_s->name_groat

Нельзя, чтобы в 1 и тот же силос привозилась крупа более чем 1 вида;

Number_s->needs

Нельзя, чтобы 1 и той же партии зерна соответствовало более 1 анализной карточки;

Num_part->num_card

Нельзя, чтобы разным номерам элеваторов соответствовали один и те же силосы;

Num_el->num_sil

Нельзя, чтобы один силос находился в разных элеваторах;

num_sil -> Num_el

3.     Проектирование оптимальной структуры базы данных методом синтеза

3.1    Исходное множество функциональных зависимостей

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

num_part -> nam, needs, sort, place, year_numb -> name, lastname, secondname, birthdate_sil -> sort, needs, type-> lim_weight_c, hours_el -> lim_weight_el_el, data -> occupied_part -> num_trans_part, num_trans, data -> name_groat, from, hours_s -> name_groat_s -> needs_part -> num_card_el -> num_sil_part, num_trans, data -> destin, hours_card, date_an -> name_groat, type_groat, year_card, date_an -> place, tab_num_lab, lastname_lab

Рисунок 2 - Функциональные зависимости БД лаборатории хлебной базы

3.2    Неизбыточное покрытие множества функциональных зависимостей

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

g:

   tab_numb -> name, lastname, secondname, birthdate

   num_sil -> sort, needs, type

   num -> lim_weight_c, hours

   number_el -> lim_weight_el

   number_el, data -> occupied

   num_el -> num_sil

   num_part -> nam, needs, sort, place, year, num_trans, num_card

   num_part, data -> name_groat, from, destin, hours

   number_s -> name_groat, needs

   num_card, date_an -> name_groat, type_groat, year, place, tab_num_lab, lastname_lab

. f=g \  tab_numb -> name, lastname, secondname, birthdate

Проверяем: f |= tab_numb -> name, lastname, secondname, birthdate

[tab_numb]+f = tab_numb

нет=> Множество ФЗ не меняется

2. f=g \  num_sil -> sort, needs, type

Проверяем: f |= num_sil -> sort, needs, type

[num_sil]+f = num_sil

нет=> Множество ФЗ не меняется

3. f=g \  num -> lim_weight_c, hours

Проверяем: f |= num -> lim_weight_c, hours

[num]+f = num

нет=> Множество ФЗ не меняется

4. f=g \  number_el -> lim_weight_el

Проверяем: f |= number_el -> lim_weight_el

[number_el]+f = number_el

нет=> Множество ФЗ не меняется

5. f=g \  number_el, data -> occupied

Проверяем: f |= number_el, data -> occupied

Рисунок 3 - Построение неизбыточного покрытия множества ФЗ

[number_el, data]+f = number_el, data, lim_weight_el

нет=> Множество ФЗ не меняется

. f=g \  num_el -> num_sil

Проверяем: f |= num_el -> num_sil

[num_el]+f = num_el

нет=> Множество ФЗ не меняется

7. f=g \  num_part -> nam, needs, sort, place, year, num_trans, num_card

Проверяем: f |= num_part -> nam, needs, sort, place, year, num_trans, _card

[num_part]+f = num_part

нет=> Множество ФЗ не меняется

. f=g \  num_part, data -> name_groat, from, destin, hours

Проверяем: f |= num_part, data -> name_groat, from, destin, hours

[num_part, data]+f = num_part, data, nam, needs, sort, place, year,

num_trans, num_card нет=> Множество ФЗ не меняется

9. f=g \  number_s -> name_groat, needs

Проверяем: f |= number_s -> name_groat, needs

[number_s]+f = number_s

нет=> Множество ФЗ не меняется

10. f=g \  num_card, date_an -> name_groat, type_groat, year, place, _num_lab, lastname_lab

Проверяем: f |= num_card, date_an -> name_groat, type_groat, year, , tab_num_lab, lastname_lab

[num_card, date_an]+f = num_card, date_an

нет=> Множество ФЗ не меняется

Рисунок 4 - Построение неизбыточного покрытия множества ФЗ

Неизбыточное покрытие::

   tab_numb -> name, lastname, secondname, birthdate

   num_sil -> sort, needs, type

   num -> lim_weight_c, hours

   number_el -> lim_weight_el

   number_el, data -> occupied

   num_el -> num_sil

   num_part -> nam, needs, sort, place, year, num_trans, num_card

   num_part, data -> name_groat, from, destin, hours

   number_s -> name_groat, needs

   num_card, date_an -> name_groat, type_groat, year, place,

   tab_num_lab, lastname_lab

Рисунок 5 - Неизбыточное покрытие множества ФЗ

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

.3      Леворедуцированное покрытие множества ФЗ

g:  tab_numb -> name, lastname, secondname, birthdate

   num_sil -> sort, needs, type

   num -> lim_weight_c, hours

   number_el -> lim_weight_el

   num_el -> num_sil

    num_part -> nam, needs, sort, place, year, num_trans, num_card

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

Рисунок 6 - Построение леворедуцированного покрытия множества ФЗ

    num_part, data -> name_groat, from, destin, hours

   number_s -> name_groat, needs

   num_card, date_an -> name_groat, type_groat, year, place,

   tab_num_lab, lastname_lab

. number_el, data -> occupied

.1. number_el, data -> occupied

Проверяем: g |= data -> occupied

нет=> Множество ФЗ не меняется

.2. number_el, data -> occupied

Проверяем: g |= number_el -> occupied

нет=> Множество ФЗ не меняется

2. num_part, data -> name_groat, from, destin, hours

.1. num_part, data -> name_groat, from, destin, hours

Проверяем: g |= data -> name_groat, from, destin, hours

нет=> Множество ФЗ не меняется

.2. num_part, data -> name_groat, from, destin, hours

Проверяем: g |= num_part -> name_groat, from, destin, hours

нет=> Множество ФЗ не меняется.

3. num_card, date_an -> name_groat, type_groat, year, place, _num_lab, lastname_lab

.1. num_card, date_an -> name_groat, type_groat, year, place, _num_lab, lastname_lab

Проверяем: g |= date_an -> name_groat, type_groat, year, place,

tab_num_lab, lastname_lab

нет=> Множество ФЗ не меняется.

3.2. num_card, date_an -> name_groat, type_groat, year, place, _num_lab, lastname_lab

Проверяем: g |= num_card -> name_groat, type_groat, year, place,

tab_num_lab, lastname_lab       нет=> Множество ФЗ не меняется.

Рисунок 7 - Построение леворедуцированного покрытия множества ФЗ

Итог::   tab_numb -> name, lastname, secondname, birthdate

   num_sil -> sort, needs, type

   num -> lim_weight_c, hours

   number_el -> lim_weight_el

   number_el, data -> occupied

   num_el -> num_sil

   num_part -> nam, needs, sort, place, year, num_trans, num_card

   num_part, data -> name_groat, from, destin, hours

   number_s -> name_groat, needs

   num_card, date_an -> name_groat, type_groat, year, place,

   tab_num_lab, lastname_lab

Рисунок 8 - Леворедуцированное покрытие множества ФЗ

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

.4      Праворедуцированное покрытие множества ФЗ

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

g:  tab_numb -> name, lastname, secondname, birthdate

   num_sil -> sort, needs, type

   num -> lim_weight_c, hours

   number_el -> lim_weight_el

   number_el, data -> occupied

   num_el -> num_sil

   num_part -> nam, needs, sort, place, year, num_trans, num_card

   num_part, data -> name_groat, from, destin, hours

Рисунок 9 - Построение праворедуцированного покрытия ФЗ

    number_s -> name_groat, needs

   num_card, date_an -> name_groat, type_groat, year, place,

   tab_num_lab, lastname_lab

. tab_numb -> name, lastname, secondname, birthdate

.1. Если удаляем name

Проверяем: f |= tab_numb -> name

нет=> Множество ФЗ не меняется.

.2. Если удаляем lastname

Проверяем: f |= tab_numb -> lastname

нет=> Множество ФЗ не меняется.

.3. Если удаляем secondname

Проверяем: f |= tab_numb -> secondname

нет=> Множество ФЗ не меняется.

.4. Если удаляем birthdate

Проверяем: f |= tab_numb -> birthdate

нет=> Множество ФЗ не меняется.

2. num_sil -> sort, needs, type

.1. Если удаляем sort

Проверяем: f |= num_sil -> sort

нет=> Множество ФЗ не меняется.

.2. Если удаляем needs

Проверяем: f |= num_sil -> needs

нет=> Множество ФЗ не меняется.

.3. Если удаляем type

Проверяем: f |= num_sil -> type

нет=> Множество ФЗ не меняется.

3. num -> lim_weight_c, hours

.1. Если удаляем lim_weight_c

Проверяем: f |= num -> lim_weight_c

Рисунок 10 - Построение праворедуцированного покрытия ФЗ

нет=> Множество ФЗ не меняется.

.2. Если удаляем hours

Проверяем: f |= num -> hours

нет=> Множество ФЗ не меняется.

4. number_el -> lim_weight_el

.1. Если удаляем lim_weight_el

Проверяем: f |= number_el -> lim_weight_el

нет=> Множество ФЗ не меняется.

5. number_el, data -> occupied

.1. Если удаляем occupied

Проверяем: f |= number_el, data -> occupied

нет=> Множество ФЗ не меняется.

. Если удаляем -> num_sil

.1. Если удаляем num_sil

Проверяем: f |= num_el -> num_sil

нет=> Множество ФЗ не меняется.

7. num_part -> nam, needs, sort, place, year, num_trans, num_card

.1. Если удаляем nam

Проверяем: f |= num_part -> nam

нет=> Множество ФЗ не меняется.

.2. Если удаляем needs

Проверяем: f |= num_part -> needs

нет=> Множество ФЗ не меняется.

.3. Если удаляем sort

Проверяем: f |= num_part -> sort

нет=> Множество ФЗ не меняется.

.4. Если удаляем place

Проверяем: f |= num_part -> place

нет=> Множество ФЗ не меняется.

Рисунок 11 - Построение праворедуцированного покрытия ФЗ

.5. Если удаляем year

Проверяем: f |= num_part -> year

нет=> Множество ФЗ не меняется.

7.6. Если удаляем num_trans

Проверяем: f |= num_part -> num_trans

нет=> Множество ФЗ не меняется.

.7. Если удаляем num_card

Проверяем: f |= num_part -> num_card

нет=> Множество ФЗ не меняется.

8. num_part, data -> name_groat, from, destin, hours

.1. Если удаляем name_groat

Проверяем: f |= num_part, data -> name_groat

нет=> Множество ФЗ не меняется.

8.2. Если удаляем from

Проверяем: f |= num_part, data -> from

нет=> Множество ФЗ не меняется.

8.3. Если удаляем destin

Проверяем: f |= num_part, data -> destin

нет=> Множество ФЗ не меняется.

8.4. Если удаляем hours

Проверяем: f |= num_part, data -> hours

нет=> Множество ФЗ не меняется.

9. number_s -> name_groat, needs

.1. Если удаляем name_groat

Проверяем: f |= number_s -> name_groat

нет=> Множество ФЗ не меняется.

9.2. Если удаляем needs

Проверяем: f |= number_s -> needs

нет=> Множество ФЗ не меняется.

Рисунок 12 - Построение праворедуцированного покрытия ФЗ

10. num_card, date_an -> name_groat, type_groat, year, place,       tab_num_lab, lastname_lab

.1. Если удаляем name_groat

Проверяем: f |= num_card, date_an -> name_groat

нет=> Множество ФЗ не меняется.

10.2. Если удаляем type_groat

Проверяем: f |= num_card, date_an -> type_groat

нет=> Множество ФЗ не меняется.

10.3. Если удаляем year

Проверяем: f |= num_card, date_an -> year

нет=> Множество ФЗ не меняется.

10.4. Если удаляем place

Проверяем: f |= num_card, date_an -> place

нет=> Множество ФЗ не меняется.

10.5. Если удаляем tab_num_lab

Проверяем: f |= num_card, date_an -> tab_num_lab

нет=> Множество ФЗ не меняется.

Удаление зависимостей вида Х->

Итог: g:  tab_numb -> name, lastname, secondname, birthdate

   num_sil -> sort, needs, type

   num -> lim_weight_c, hours

   number_el -> lim_weight_el

   number_el, data -> occupied

   num_el -> num_sil

   num_part -> nam, needs, sort, place, year, num_trans, num_card

     num_part, data -> name_groat, from, destin, hours

     number_s -> name_groat, needs

      num_card, date_an -> name_groat, type_groat, year, place,  tab_num_lab, lastname_lab

Рисунок 13 - Праворедуцированное покрытие множества ФЗ

.5      Минимальное покрытие

таблица база данные запрос

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

1. Ef( tab_numb ):

   tab_numb -> name, lastname, secondname, birthdate

. Ef( num_sil ):

   num_sil -> sort, needs, type

. Ef( num ):

   num -> lim_weight_c, hours

. Ef( number_el ):

   number_el -> lim_weight_el

. Ef( number_el, data ):

   number_el, data -> occupied

. Ef( num_el ):

   num_el -> num_sil

. Ef( num_part ):

   num_part -> nam, needs, sort, place, year, num_trans, num_card

. Ef( num_part, data ):

   num_part, data -> name_groat, from, destin, hours

. Ef( number_s ):

   number_s -> name_groat, needs

. Ef( num_card, date_an ):

   num_card, date_an -> name_groat, type_groat, year, place,

   tab_num_lab, lastname_lab

Построение минимального покрытия на основе прямой функциональной определяемости

Редуцированное минимальное покрытие

g: tab_numb -> name, lastname, secondname, birthdate

Рисунок 14 - Построение минимального покрытия множества ФЗ

    num_sil -> sort, needs, type

   num -> lim_weight_c, hours

   number_el -> lim_weight_el

   number_el, data -> occupied

   num_el -> num_sil

   num_part -> nam, needs, sort, place, year, num_trans, num_card

   num_part, data -> name_groat, from, destin, hours

   number_s -> name_groat, needs

   num_card, date_an -> name_groat, type_groat, year, place,

   tab_num_lab, lastname_lab

Рисунок 15 - Минимальное покрытие множества ФЗ

.6     

3.6    Редуцированное минимальное кольцевое покрытие

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

Минимальное кольцевое покрытие

( tab_numb; ) -> name, lastname, secondname, birthdate

( num_sil; ) -> sort, needs, type

( num; ) -> lim_weight_c, hours

( number_el; ) -> lim_weight_el

( number_el, data; ) -> occupied

( num_el; ) -> num_sil

( num_part; ) -> nam, needs, sort, place, year, num_trans, num_card

( num_part, data; ) -> name_groat, from, destin, hours

( number_s; ) -> name_groat, needs

( num_card, date_an; ) -> name_groat, type_groat, year, place, _num_lab, lastname_lab.

Рисунок 16 - Построение минимального кольцевого покрытия множества ФЗ

Получение кольцевого минимального редуцированого покрытия

Естественное характеристическое множество для кольцевого покрытия.

f(C):  tab_numb -> name, lastname, secondname, birthdate

   num_sil -> sort, needs, type

   num -> lim_weight_c, hours

   number_el -> lim_weight_el

   number_el, data -> occupied

   num_el -> num_sil

   num_part -> nam, needs, sort, place, year, num_trans, num_card

   num_part, data -> name_groat, from, destin, hours

   number_s -> name_groat, needs

   num_card, date_an -> name_groat, type_groat, year, place,

   tab_num_lab, lastname_lab

Левая редукция или перенос в правую часть

1. Проверка CF-зависимости:

        ( tab_numb; ) -> name, lastname, secondname, birthdate

.1. Сформированная CF-зависимость:

        ( ) -> name, lastname, secondname, birthdate, tab_numb

        Характеристические множества не эквивалентны

. Проверка CF-зависимости:

        ( num_sil; ) -> sort, needs, type

.1. Сформированная CF- зависимость:

        ( ) -> sort, needs, type, num_sil

        Характеристические множества не эквивалентны

. Проверка CF-зависимости:

        ( num; ) -> lim_weight_c, hours

.1. Сформированная CF- зависимость:

        ( ) -> lim_weight_c, hours, num

Рисунок 17 - Построение редуцированного минимального кольцевого покрытия множества ФЗ

Характеристические множества не эквивалентны

. Проверка CF-зависимости:

        ( number_el; ) -> lim_weight_el

.1. Сформированная CF- зависимость:

        ( ) -> lim_weight_el, number_el

        Характеристические множества не эквивалентны

. Проверка CF-зависимости:

        ( number_el, data; ) -> occupied

.1. Сформированная CF- зависимость:

        ( data; ) -> occupied, number_el

        Характеристические множества не эквивалентны

.2. Сформированная CF- зависимость:

        ( number_el; ) -> occupied, data

        Характеристические множества не эквивалентны

. Проверка CF-зависимости:

        ( num_el; ) -> num_sil

.1. Сформированная CF- зависимость:

        ( ) -> num_sil, num_el

        Характеристические множества не эквивалентны

7. Проверка CF-зависимости:

        ( num_part; ) -> nam, needs, sort, place, year, num_trans, num_card

.1. Сформированная CF- зависимость:

        ( ) -> nam, needs, sort, place, year, num_trans, num_card, num_part

        Характеристические множества не эквивалентны

. Проверка CF-зависимости:

        ( num_part, data; ) -> name_groat, from, destin, hours

8.1. Сформированная CF- зависимость:

         ( data; ) -> name_groat, from, destin, hours, num_part

Рисунок 18 - Построение редуцированного минимального кольцевого покрытия множества ФЗ

        Характеристические множества не эквивалентны

.2. Сформированная CF- зависимость:

        ( num_part; ) -> name_groat, from, destin, hours, data

        Характеристические множества не эквивалентны

. Проверка CF-зависимости:

        ( number_s; ) -> name_groat, needs

.1. Сформированная CF- зависимость:

        ( ) -> name_groat, needs, number_s

        Характеристические множества не эквивалентны

. Проверка CF-зависимости:

        ( num_card, date_an; ) -> name_groat, type_groat, year, place, _num_lab, lastname_lab

.1. Сформированная CF- зависимость:

        ( date_an; ) -> name_groat, type_groat, year, place, tab_num_lab,

lastname_lab, num_card

        Характеристические множества не эквивалентны

10.2. Сформированная CF- зависимость:

        ( num_card; ) -> name_groat, type_groat, year, place, tab_num_lab,

lastname_lab, date_an

        Характеристические множества не эквивалентны

Проверка покрытия на праворедуцированность

. Проверка CF-зависимости:

        ( tab_numb; ) -> name, lastname, secondname, birthdate

.1. Сформированная CF- зависимость:

        ( tab_numb; ) -> lastname, secondname, birthdate

        Характеристические множества не эквивалентны

.2. Сформированная CF- зависимость:

        ( tab_numb; ) -> name, secondname, birthdate

Рисунок 19 - Построение редуцированного минимального кольцевого покрытия множества ФЗ

         Характеристические множества не эквивалентны

.3. Сформированная CF- зависимость:

        ( tab_numb; ) -> name, lastname, birthdate

        Характеристические множества не эквивалентны

.4. Сформированная CF- зависимость:

        ( tab_numb; ) -> name, lastname, secondname

        Характеристические множества не эквивалентны

. Проверка CF-зависимости:

        ( num_sil; ) -> sort, needs, type

.1. Сформированная CF- зависимость:

        ( num_sil; ) -> needs, type

        Характеристические множества не эквивалентны

.2. Сформированная CF- зависимость:

        ( num_sil; ) -> sort, type

        Характеристические множества не эквивалентны

.3. Сформированная CF- зависимость:

        ( num_sil; ) -> sort, needs

        Характеристические множества не эквивалентны

. Проверка CF-зависимости:

        ( num; ) -> lim_weight_c, hours

.1. Сформированная CF- зависимость:

        ( num; ) -> hours

        Характеристические множества не эквивалентны

.2. Проверка CF-зависимости:

        ( num; ) -> lim_weight_c

        Характеристические множества не эквивалентны

. Проверка CF-зависимости:

        ( number_el; ) -> lim_weight_el

.1. Сформированная CF- зависимость:

Рисунок 20 - Построение редуцированного минимального кольцевого покрытия множества ФЗ

       ( number_el; )

        Характеристические множества не эквивалентны

. Проверка CF-зависимости:

        ( number_el, data; ) -> occupied

.1. Сформированная CF- зависимость:

        ( number_el, data; )

        Характеристические множества не эквивалентны

        ( num_el; ) -> num_sil

.1. Сформированная CF- зависимость:

        ( num_el; )

        Характеристические множества не эквивалентны

. Проверка CF- зависимости:

        ( num_part; ) -> nam, needs, sort, place, year, num_trans, num_card

.1. Сформированная CF- зависимость:

        ( num_part; ) -> needs, sort, place, year, num_trans, num_card

        Характеристические множества не эквивалентны

.2. Сформированная CF- зависимость:

        ( num_part; ) -> nam, sort, place, year, num_trans, num_card

        Характеристические множества не эквивалентны

.3. Сформированная CF- зависимость:

        ( num_part; ) -> nam, needs, place, year, num_trans, num_card

        Характеристические множества не эквивалентны

.4. Сформированная CF- зависимость:

        ( num_part; ) -> nam, needs, sort, year, num_trans, num_card

        Характеристические множества не эквивалентны

.5. Сформированная CF- зависимость:

        ( num_part; ) -> nam, needs, sort, place, num_trans, num_card

        Характеристические множества не эквивалентны

Рисунок 21 - Построение редуцированного минимального кольцевого покрытия множества ФЗ

8.6. Сформированная CF- зависимость:

        ( num_part; ) -> nam, needs, sort, place, year, num_card

        Характеристические множества не эквивалентны

.7. Сформированная CF- зависимость:

        ( num_part; ) -> nam, needs, sort, place, year, num_trans

        Характеристические множества не эквивалентны

. Проверка CF- зависимости:

        ( num_part, data; ) -> name_groat, from, destin, hours

.1. Сформированная CF- зависимость:

        ( num_part, data; ) -> from, destin, hours

        Характеристические множества не эквивалентны

.2. Сформированная CF- зависимость:

        ( num_part, data; ) -> name_groat, destin, hours

        Характеристические множества не эквивалентны

.3. Сформированная CF- зависимость:

        ( num_part, data; ) -> name_groat, from, hours

        Характеристические множества не эквивалентны

.4. Сформированная CF- зависимость:

        ( num_part, data; ) -> name_groat, from, destin

        Характеристические множества не эквивалентны

. Проверка CF- зависимости:

        ( number_s; ) -> name_groat, needs

.1. Сформированная CF- зависимость:

        ( number_s; ) -> needs

        Характеристические множества не эквивалентны

.2. Сформированная CF- зависимость:

        ( number_s; ) -> name_groat

        Характеристические множества не эквивалентны

. Проверка CF- зависимости:

Рисунок 22 - Построение редуцированного минимального кольцевого покрытия множества ФЗ

         ( num_card, date_an; ) -> name_groat, type_groat, year, place, _num_lab, lastname_lab

.1. Сформированная CF- зависимость:

        ( num_card, date_an; ) -> type_groat, year, place, tab_num_lab,

lastname_lab

        Характеристические множества не эквивалентны

11.2. Сформированная CF- зависимость:

        ( num_card, date_an; ) -> name_groat, year, place, tab_num_lab,

lastname_lab

        Характеристические множества не эквивалентны

11.3. Сформированная CF- зависимость:

        ( num_card, date_an; ) -> name_groat, type_groat, place,

tab_num_lab, lastname_lab

        Характеристические множества не эквивалентны

11.4. Сформированная CF- зависимость:

        ( num_card, date_an; ) -> name_groat, type_groat, year,

tab_num_lab, lastname_lab

        Характеристические множества не эквивалентны

11.5. Сформированная CF- зависимость:

        ( num_card, date_an; ) -> name_groat, type_groat, year, place,

lastname_lab

        Характеристические множества не эквивалентны

11.6. Сформированная CF- зависимость:

        ( num_card, date_an; ) -> name_groat, type_groat, year, place,

tab_num_lab

        Характеристические множества не эквивалентны

Рисунок 23 - Построение редуцированного минимального кольцевого покрытия множества ФЗ

Минимальное редуцированное кольцевое покрытие   ( tab_numb; ) -> name, lastname, secondname, birthdate

   ( num_sil; ) -> sort, needs, type

   ( num; ) -> lim_weight_c, hours

   ( number_el; ) -> lim_weight_el

   ( number_el, data; ) -> occupied

   ( num_el; ) -> num_sil

   ( num_part; ) -> nam, needs, sort, place, year, num_trans, num_card

   ( num_part, data; ) -> name_groat, from, destin, hours

   ( number_s; ) -> name_groat, needs

   ( num_card, date_an; ) -> name_groat, type_groat, year, place,

   tab_num_lab, lastname_lab

Естественное характеристическое множество

f(C):

   tab_numb -> name, lastname, secondname, birthdate

   num_sil -> sort, needs, type

   num -> lim_weight_c, hours

   number_el -> lim_weight_el

   number_el, data -> occupied

   num_el -> num_sil

   num_part -> nam, needs, sort, place, year, num_trans, num_card

   num_part, data -> name_groat, from, destin, hours

   number_s -> name_groat, needs

   num_card, date_an -> name_groat, type_groat, year, place,

   tab_num_lab, lastname_lab

Рисунок 24 - Редуцированное минимальное кольцевое покрытие множества ФЗ

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

R0 = ( tab_numb, name, lastname, secondname, birthdate )  K0 ={tab_numb}= ( num_sil, sort, needs, type )   K1 = { num_sil }= ( num, lim_weight_c, hours )   K2 = { num }= ( number_el, lim_weight_el )   K3 = { number_el }= ( number_el, data, occupied )   K4 = { number_el, data }= ( num_el, num_sil )   K5 = { num_el }= ( num_part, nam, needs, sort, place, year, num_trans, num_card )   = { num_part }= ( num_part, data, name_groat, from, destin, hours )   K7 = { num_part, }= ( number_s, name_groat, needs )   K8 = { number_s }= ( num_card, date_an, name_groat, type_groat, year, place, _num_lab, lastname_lab )   K9 = { num_card, date_an }

Рисунок 25 - Структура базы данных лаборатории хлебной базы, полученная методом синтеза

4.  Оптимизация запросов к базе данных

4.1    Статистика по таблицам базы данных

Для иллюстрации статистики по таблицам базы данных лаборатории хлебной базы ниже указаны таблицы базы данных и их поля (в записи жирным отмечены ключевые поля).

-    groats (nam,needs,sort,year,place,num_part);

-       laborants (tab_num,lastname,name,secondname,birth_date);

-       analysis_card (num_card, date_an, lastname_lab, tab_num_lab, num_part_gr, name_groat_an, type_groat_an, place, year);

-       transport (num, hours, lim_weight_c);

-       grain_elevator (number_el, lim_weight_el);

-       current_elev (data, occupied, number_el);

-       silo (number_s, lim_weight_s, weight_s, name_groat, type_groat, num_elev, num_part);

-       receivs (num_part, num_trans, from, hourrs, name_groat, dat, num_sil);

-       dispatch (num_part, num_trans, destin, hourrs, name_groat, data).

Общее число записей в каждой из таблиц:

-       T(Groats)=100.

-       T(Laborants)=10.

-       T(Analysis_card)=100.

-       T(Transport)=40.

-       T(Grain_elevator)=4.

-       T(Current_elev)=50.

-       T(Silo)=100.

-       T(Receivs)=100.

-       T(Dispatch)=100.

a.      

4.2    Многотабличный запрос на выборку по условию

Найти все партии крупы, полученные начиная с 30-08-10, анализные карточки для которых заполнял лаборант с табельным номером 10.

.2.1   Выражение для запроса с использованием реляционной алгебры

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

(Groats. nam,needs,sort,year,place,num_part) sel (receivs.dat >{^2010-08-30}

& analysis_card.tab_num_lab=10) (groatsreceivs, analysis.card)

Рисунок 26 - Выражение для запроса с использованием реляционной алгебры

.2.2   Исходное операционное дерево для запроса

Исходное операционное дерево для многотабличного запроса на выборку по условию представлено на рисунке 27.

Рисунок 27 - Исходное операционное дерево запроса

.2.3   Оптимизированное операционное дерево для запроса

Оптимизированное операционное дерево для многотабличного запроса на выборку по условию одной строки представлено на рисунке 28.

Рисунок 28 - Оптимизированное операционное дерево запроса

.2.4   Исходный запрос на языке SQL

Текст исходного запроса на языке SQL показан на рисунке 29.

SELECT * FROM groats JOIN (reseivs JOIN analysis_card ON reseivs.num_part=analysis_card.num_part_gr) ON groats.num_part=reseivs.num_part ; WHERE (reseivs.dat > {^2010-08-30} AND analysis_card.tab_num_lab=10); INTO CURSOR q Browse

Рисунок 29 - Исходный запрос на языке SQL

4.2.5 Оптимизированный запрос на языке SQL

Текст оптимизированного запроса на языке SQL показан на рисунке 30.

SELECT num_part_gr,name_groat_an,type_groat, place, year FROM analysis_card WHERE analysis_card.tab_num_lab=10; INTO CURSOR q1  SELECT num_part,name_groat FROM reseivs WHERE reseivs.dat > {^2010-08-30}; INTO CURSOR q2  SELECT * FROM groats; INTO CURSOR q3  SELECT * FROM t3 INNER JOIN (t2 INNER JOIN t1 ON t1.num_part_gr=t2.num_part) ON t3.num_part=t2.num_part; INTO CURSOR q Browse

Рисунок 30 - Оптимизированный запрос на языке SQL

.2.6   Расчет сложности оптимизированного запроса

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

Число записей в каждом столбце таблицы analysis_card:

-    V(num_part_gr, analysis_card )=100.

-       V(name_groat_an,analysis_card)=50.

-       V(type_groat, analysis_card)=20.

-       V(place,analysis_card)=100.

-       V(year,analysis_card)=20.

-       V(tab_num_lab, analysis_card)=50.

Длина одной записи в поле каждого из перечисленных типов:

-    L(num_part_gr)=4 байтa.

-       L(name_groat_an)=30 байт.

-       L(type_groat)=30 байт.

-       L(place)=40 байт.

-       L(year)=4 байтa.

-       L(tab_num_lab)=4 байта.

-       L(lastname_lab)=40 байт.

-       L(date_an)=8 байт.

-       L(num_card)=4 байт.

Расчет сложности подзапроса q21отображен на рисунке 31.

T(q21)=T(analysis_card)/V(tab_num_lab, analysis_card)=100/50=2. Vol (q21)=T(q21)*L(q21); L(q21)= L(num_part_gr) + L(name_groat_an) + L(type_groat) + L(place) + L(year) + L(tab_num_lab)+ L(lastname_lab) + L(date_an)+ L(num_card)= =4+30+30+40+4+4+4+40+8+4 = 168 байт. Vol (q21)=2*168=448 байт.

Рисунок 31- Сложность подзапроса q21

Для подзапроса q22 выпишем статистику по таблицам и произведем расчеты. Число записей в каждом столбце, необходимом для запроса, из таблицы reseivs:

-    V(num_part, reseivs)=100.

-       V(name_groat, reseivs)=50.

-       V(dat, reseivs)=50.

-       V(num_trans,reseivs)=40.

-       V(from,reseivs)=100.

-       V(hours, reseivs)=2.

-       V(num_sil, reseivs)=100.

Длина одной записи в поле каждого из перечисленных типов:

-    L(num_part)=4 байтa.

-       L(name_groat)=30 байт.

-       L(dat) =8 байт.

-       L(num_trans) =4 байта.

-       L(from) =40 байт.

-       L(hours) =4 байта.

-       L(num_sil) =4 байта.

Расчет сложности подзапроса показан на рисунке 32.

T(q22)=T(reseivs)*1/3=100*1/3≈33. Статистика по запросу: Vol (q22)=T(q22)*L(q22); L(q22)= L(num_part) + L(name_groat) + L(dat) + L(num_trans) + L(from) + +L(hours) + L(num_sil) = 4+30+8+4+40+4+4 = 98 байт. Vol (q22)=33*98= 3234 байта.

Рисунок 32 - Сложность подзапроса q22

Для подзапроса q23 статистика по таблице не меняется, поскольку осуществляется операция проекции над результатом подзапроса q22.

T(q23)=T(reseivs)*1/3=100*1/3≈33. L(q23)= L(num_part) + L(name_groat) = 4+30= 34 байта. Vol (q23)=33*34= 1122 байта.

Рисунок 33 - Сложность подзапроса q23

Для подзапроса q24 статистика по таблице не меняется, поскольку осуществляется операция проекции над результатом подзапроса q21.

T(q24)=T(analysis_card)/V(tab_num_lab, analysis_card)=100/50=2. L(q24)= L(num_part_gr) + L(name_groat_an) + L(type_groat) + L(place) + L(year) =4+30+30+40+4+4= 112 байт. Vol (q24)=2*112=224 байта.

Рисунок 34 - Сложность подзапроса q24

Подзапрос q25 - естественное слияние результатов подзапросов q23 и q24. Расчет сложности подзапроса q25 показан на рисунке 35.

T(q25)=T(q23)*T(q24)/max(V(num_part_gr,q23),V(num_part,q24))= =33*2/max(20,25)=3. L(q25)= L(num_part) + L(name_groat) =4+30= 34 байта. Vol (q25)=3*34=102 байта.

Рисунок 35 - Сложность подзапроса q25

Подзапрос q26 не меняет статистику подзапроса q25, поскольку это операция проекции. Расчет сложности подзапроса q26 показан на рисунке 36.

T(q26)=T(q25)=3. L(q26)= L(num_part) + L(name_groat) =4+30=34 байта. Vol (q26)=3*34=102 байта.

Рисунок 36 - Сложность подзапроса q26

Подзапрос q27 не меняет статистику по таблице groats, поскольку это операция проекции.

Число записей в каждом столбце из таблицы groats:

-    V(num_part, groats)=100;

-       V(name, groats)=50;

-       V(sort, groats)=15;

-       V(needs,groats)=20;

-       V(place, groats)=100;

-       V(year,groats)=20.

Длина одной записи в поле каждого из перечисленных типов:

-    L(num_part)=4 байтa;

-       L(nam)=30 байт;

-       L(needs)=30 байт;

-       L(sort)= 4 байтa;

-       L(place)=40 байт;

-       L(year)=4 байтa.

Расчет сложности подзапроса q27 показан на рисунке 37.

T(q27)=T(groats)=100. Vol (q27)=T(q27)*L(q27); L(q27)= L(num_part) + L(nam)+ L(needs) =4+30+30= 64 байта. Vol (q1)=100*64=6400 байт.

Рисунок 37 - Сложность подзапроса q27

Подзапрос q28 - естественное слияние результатов подзапросов q27 и q26. Расчет сложности подзапроса q28 показан на рисунке 38.

T(q28)=T(q27)*T(q26)/max(V(num_part,q26),V(num_part,q27))= =3*100/max(25,100)=3. L(q25)= L(num_part) + L(name_groat) =4+30= 34 байта. Vol (q25)=3*34=102 байта.

Рисунок 38 - Сложность подзапроса q28

Сложность всего оптимизированного запроса рассчитывается как сумма сложностей промежуточных подзапросов. Таким образом, она составляет: Vol(q2)=448+3234+1122+224+102+102+6400+102=11734 байта.

4.3   

4.3    Многотабличный запрос на выборку по условию

Найти всех лаборантов, работавших с анализами 17 и 10 партий крупы.

.3.1   Выражение для запроса с использованием реляционной алгебры

pr (laborants.tab_num, lastname, name, secondname, birthdate) sel (analylis_card.num_part = 10 V analylis_card.num_part = 17) (laborantsanalysis_card)

4.3.2 Исходное операционное дерево для запроса

Исходное операционное дерево для многотабличного запроса на выборку по условию представлено на рисунке 4.

Рисунок 4. Исходное операционное дерево запроса

.3.3  

4.3.3  Оптимизированное операционное дерево для запроса

Оптимизированное операционное дерево для многотабличного запроса на выборку по условию одной строки представлено на рисунке 5.

Рисунок 5. Оптимизированное операционное дерево для запроса

.3.4   Исходный запрос на языке SQL

SELECT * FROM laborants INNER JOIN analysis_card ON_card.tab_num_lab=laborants.tab_num ;(analysis_card.num_part_gr = 10 OR_card.num_part_gr = 17);

INTO Cursor q

Browse

4.3.5

4.3.5 Оптимизированный запрос на языке SQL

SELECT * FROM laborantsCursor q1* FROM analysis_card(analysis_card.num_part_gr = 10 OR_card.num_part_gr = 17);Cursor q2* FROM q1 INNER JOIN q2 ON.tab_num_lab=q1.tab_num;

INTO Cursor q

Browse

4.3.6 Расчет сложности запроса

Для подзапроса q1

Число записей в каждом столбце таблицы laborants:

V(tab_num, laborants)=10;(lastname, laborants)=10;(name, laborants)=10;(secondname, laborants)=10;(birth_date, laborants)=10;

Длина одной записи в поле каждого из перечисленных типов:

L(tab_num)=4 байтa;(lastname)=40 байт;(name)=40 байт;(secondname)=40 байт;(birth_date)=8 байт.

Сложность запроса:

T(q1)=T(laborants)=10.

Статистика по запросу:

Vol (q1)=T(q1)*L(q1);(q1) = L(tab_num) + L(lastname) + L(name) + L(secondname) + +L(birth_date) = 4+40+40+40+8 = 132 байтa. (q1)=10*132=1320 байт.

Для подзапроса q2

Число записей в каждом столбце, необходимом для запроса, из таблицы analysis_card:

V(num_card, analysis_card)=100;(date_an, analysis_card)=40;(lastname_lab, analysis_card)=10;(tab_num_lab, analysis_card)=10;(num_part_gr, analysis_card)=100;(name_groat_an, analysis_card)=20;(num_part, analysis_card)=100.

Длина одной записи в поле каждого из перечисленных типов:

L(num_part)=4 байтa;(name_groat)=30 байт;(tab_num_lab)= 4 байтa.

Сложность запроса:(q2-1)=T(analysis_card)/V(analysis_card, num_part)=100/100=1.(q2-2)= T(analysis_card)/V(analysis_card, num_part)=100/100=1.(q2)= T(q2-1)+ T(q2-2)=2.

Статистика по запросу:

Vol (q2)=T(q2)*L(q2);

L(q2)= L(tab_num_lab) = 4 байтa.

Vol (q1)=4*2=8 байт.

Сложность всего запроса:

T(q2 INNER JOIN q1) = T(q1)*T(q2) / max(V(tab_num,q1),V(tab_num_lab,q2))=

=10*2/max(10,10)=2.

Заключение

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

Список использованных источников


1               Гектор Гарсиа-Молина, Джеффри Ульман, Дженнифер Уидом. Системы баз данных. Полный курс.-М.: Вильямс, 2004.-1088 с.

2       Лебедев А. Н. Visual FoxPro 9. - М.: НТ Пресс, 2005. - 328 с.

3   Роб П. Системы баз данных: проектирование, реализация и управление. - СПб.: БХВ-Петербург, 2004. - 1040 с.

4       Попов И. И. Базы данных. - М.: ИнфраРум, 2007. - 400 с.

         Фуфаев Э. В. Базы данных. - М.: Академия, 2007. - 320 с.

         Советов Б. Я. Базы данных. - М.: Высшая школа, 2005. - 464 с.

Похожие работы на - Базы данных лаборатории хлебной базы

 

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