Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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

Поиск

Курсовая работа

 

По дисциплине «Теория оптимизации баз данных»

На тему: «Оптимизация базы данных «Хозяйственный учет футбольного клуба»

 

Направление подготовки 010503.65 «Математическое обеспечение и администрирование информационных систем»

Специальность «Информационные системы»

 

Выполнил:

студент 413 гр. Анурьев Н.О.

 

Руководитель работы:

ассистент кафедры ПОиАИС Ураева E.E

 

 

Оценка ____________________________ «__________» 20_____г.

 

Члены экспертной комиссии:

доцент, кандидат технических наук Белов В.Г.

 

ассистент кафедры ПОиАИС Ураева E.E

 

 

Курск 2014


СОДЕРЖАНИЕ

СОДЕРЖАНИЕ.. 2

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

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

1.1.1. Название предметной области и ее краткое описание. 3

1.1.2. Объекты предметной области. 3

1.1.3. Процессы взаимодействия между объектами, происходящие в предметной области. 4

1.2. Формализованное описание предметной области. 5

1.2.1. Словарь терминов для объектов и элементов данных. 5

1.2.2. Первичные и альтернативные ключи……………………………………………...................………………10

1.2.3. Диаграмма сущность – связь для предметной области. 11

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

2.1. Функциональные зависимости для отношений предметной области. 12

2.1.1. Ключевые функциональные зависимости. 12

2.1.2. Не ключевые функциональные зависимости. 13

2.1.3. Функциональные зависимости для сохранения иерархии. 13

2.1.4. Функциональные зависимости для устранения потери информации при соединении. 13

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

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

3.1 Построение неизбытычного покрытия. 17

3.2. Построение леворедуцированного покрытия. 26

3.3. Построение праворедуцированного покрытия. 27

 


4. Минимальное кольцевое редуцированное покрытие системы функциональных зависимостей 29

4.1. Естественно-характеристическое множество. 30

4.2. Диаграмма сущность – связь, построенная на основании минимального кольцевого редуцированного покрытия множества функциональных зависимостей. 30

4.3. Физическая структура базы данных. 31

5. Построение запросов на языке SQL.. 32

5.1. Многотабличный запрос на выборку по условию нескольких строк и логической формулы условий столбцов. 32

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

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

5.1.4. Временные характеристики исходного запроса. 34

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

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

5.1.7. Временные характеристики оптимизированного запроса. 40

5.2. Многотабличный запрос на выборку по условию нескольких строк и логической формулы условий столбцов с использованием "or". 42

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

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

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

Заключение................................................................................................................................................................................................... 46

Приложение 1. 47

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

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

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

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

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

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

Для инвентаря и техники хранится информация о фирме-изготовителе и модели товара. Для мебели должна быть отражена информация о фирме-производителе, цвете, габаритных размерах (длина, ширина, высота).

Каждой единице в поступившей партии объектов присваивается инвентарный номер, который ее однозначно определяет.

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

Инвентарь, техника и мебель могут быть списаны, при этом хранится дата списания.

Объекты предметной области

Человек – информация обо всех людях, работающих в клубе, в том числе паспортные данные, должность и т.д.

Тренеры – информация обо всех тренерах клуба, в том числе имя, фамилия, статус, и т.д.

Игроки – информация обо всех игроках клуба, в том числе имя, фамилия, амплуа, игровой номер, и т.д.

Помещения – информация о помещениях, в том числе номер, площадь, и т.д.

Комнаты – информация о помещениях, предназначенных для проживания, в том числе номер комнаты.

Залы – информация о помещениях, предназначенных для тренировок, в том числе номер, назначение и т.д.

Поступление объектов – информация о поставленной технике, мебели, спортивном инвентаре, в том числеID, цена и дата поступления.

Спортивный инвентарь – информация о поставленном спортивном инвентаре, в том числе производитель, наименование и т.д.

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

Мебель – информация о поставленной мебели, в том числе наименование, производитель и габариты.

Размещение объектов по помещениям – информация о соответствии помещений и прикрепленных к ним объектам, в том числе инвентарый номер объекта и номер помещения.

Расселение людей по комнатам – информация о комнатах и проживающих в них людях, в том числе номер помещения и номер пасспорта человека.

Инвентаризация объектов – информация об инвентаризации объектов, в том числе IDобъекта и его инвентарный номер.

Списание объектов - информация о списании объектов, в том числе инвентарный номер объекта, дата списания, причина и т.д.

Процессы взаимодействия между объектами, происходящие в предметной области

Человек проживает в комнате

Мебель подлежит инвентаризации

Техника подлежит инвентаризации

Спортинвый инвентарь подлежит инвентаризации

Мебель подлежит списанию

Техника подлежит списанию

Спортивный инвентарь подлежит списанию

Спортивный инвентарь прикрепляется к спортивному залу

Мебель прикрепляется к помещению

Техника прикрепляется к помещению

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

Первичные и альтернативные ключи

- Человек первичный ключ номер и серия паспорта

- Игрок первичный ключ номер и серия паспорта

- Тренер первичный ключ номер и серия паспорта

- Помещение первичный ключ номер

- Зал первичный ключ номер

- Комната первичный ключ номер

- Объект превичный ключ код объекта

- Мебель первичный ключ ID

- Техника первичный ключ ID

- Спортивный инвентарь первичный ключ ID

- Инвентаризация объекта первичный ключ IDсписания

- Инвентаризация спортинвентаря первичный ключ IDсписания

- Инвентаризация техники первичный ключ IDсписания

- Инвентаризация мебели первичный ключ IDсписания

- Списание спортинвентаря первичный ключ ID

- Списание техники первичный ключ ID

- Списание мебели первичный ключ ID

- Расселение людей по комнатам первичный ключ индекс расселения

- Распределение инвентаря по залам первичный ключ ID распределения

- Распределение техники по помещениям первичный ключ ID распределения

- Распределение мебели по помещениям первичный ключ ID распределения

 


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

Функциональные зависимости для отношений предметной области

Функциональные зависимости для сохранения иерархии

Несуществующий человек не может быть тренером.

number ->passport, fam, im, otch, pol, dateborn, datevidachi, kemvidan, country, city, street, numstreet, numflat, dolgnost

Несуществующий человек не может быть футболистом.

status_c -> passport,fam, im, otch, pol, dateborn, datevidachi, kemvidan, country, city, street, numstreet, numflat, dolgnost

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

Рисунок 4.1


Построение запросов на языке SQL

Таблица 5.1– Обозначения и пояснения

Обозначение Пояснение
Obj Таблица Arrived_Obj (список объектов)
Inv Таблица Inventar (инвентарь)
InvNum Таблица InvNum_Inv (инвентаризация)
Inv_Zal Таблица Inv_In_Zal (инвентарь, прикреплённый к помещению)
Zal Таблица Zal (список спортивных залов)
Pom Таблица Pomeshenie (список помещений)
Естественное соединение таблиц

Таблица 5.3– Обозначения и пояснения

Обозначение Пояснение
Obj Таблица Arrived_Obj (список объектов)
Inv Таблица Inventar (инвентарь)
InvNum Таблица InvNum_Inv (инвентаризация)
Inv_Zal Таблица Inv_In_Zal (инвентарь, прикреплённый к помещению)
Zal Таблица Zal (список спортивных залов)
Pom Таблица Pomeshenie (список помещений)
Естественное соединение таблиц

ЗАКЛЮЧЕНИЕ

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

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

Время выполнения запроса №1 составило T(R)=16690. После оптимизации время выполнения запроса сократилось до T(R=3930). Отношение времени выполнения исходногои оптимизированного запросов равно .

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


 

Приложение 1

 

unit Unit1;

 

interface

 

uses

Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,

Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Data.DB, Data.Win.ADODB,

Vcl.Grids, Vcl.DBGrids;

 

type

TForm1 = class(TForm)

ADOConnection1: TADOConnection;

DataSource1: TDataSource;

ADOQuery1: TADOQuery;

ADOTable1: TADOTable;

DBGrid1: TDBGrid;

Button2: TButton;

Button3: TButton;

ADOQuery2: TADOQuery;

DataSource2: TDataSource;

DBGrid2: TDBGrid;

Label1: TLabel;

Label2: TLabel;

ADOQuery3: TADOQuery;

ADOQuery4: TADOQuery;

DataSource3: TDataSource;

DataSource4: TDataSource;

DBGrid3: TDBGrid;

DBGrid4: TDBGrid;

Label3: TLabel;

Label4: TLabel;

Button1: TButton;

ADOTable2: TADOTable;

ADOTable3: TADOTable;

ADOTable4: TADOTable;

ADOQuery5: TADOQuery;

DataSource5: TDataSource;

ADOTable5: TADOTable;

ADOQuery6: TADOQuery;

ADOQuery7: TADOQuery;

DataSource6: TDataSource;

DataSource7: TDataSource;

ADOTable6: TADOTable;

ADOTable7: TADOTable;

Label5: TLabel;

Label6: TLabel;

Label7: TLabel;

DBGrid5: TDBGrid;

DBGrid6: TDBGrid;

DBGrid7: TDBGrid;

Label8: TLabel;

Label9: TLabel;

Label10: TLabel;

Label11: TLabel;

Button4: TButton;

Button5: TButton;

Label12: TLabel;

Edit1: TEdit;

Button6: TButton;

Label13: TLabel;

Label14: TLabel;

ADOQuery8: TADOQuery;

ADOQuery9: TADOQuery;

ADOQuery10: TADOQuery;

DataSource8: TDataSource;

DataSource9: TDataSource;

DataSource10: TDataSource;

DBGrid8: TDBGrid;

DBGrid9: TDBGrid;

DBGrid10: TDBGrid;

Label15: TLabel;

Label16: TLabel;

Label17: TLabel;

Button7: TButton;

Label18: TLabel;

Button8: TButton;

ADOTable8: TADOTable;

ADOTable9: TADOTable;

ADOTable10: TADOTable;

Label19: TLabel;

Label20: TLabel;

DBGrid11: TDBGrid;

ADOQuery11: TADOQuery;

DataSource11: TDataSource;

Button9: TButton;

Button10: TButton;

Button11: TButton;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure Button6Click(Sender: TObject);

procedure Button8Click(Sender: TObject);

procedure Button7Click(Sender: TObject);

procedure Button9Click(Sender: TObject);

procedure Button10Click(Sender: TObject);

procedure Button11Click(Sender: TObject);

 

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Form1: TForm1;

Z1, Z2: longint;

num, code_obj, case_inv, INV_ID: integer; // num - номер помещения

s1, s: string;

inv_num_tec, inv_num_meb, inv_num_invent, all_count: longint;

mas1, mas2: array of integer;

naimenovanie,ddate: string;

implementation

 

{$R *.dfm}

 

procedure FileWr;

var

f: Textfile;

//name: string;

begin

AssignFile (f, 'ids.txt'); //открыли файл

Rewrite (f);

WriteLn(f, inttostr(code_obj));

WriteLn(f, inttostr(inv_num_tec));

WriteLn(f, inttostr(inv_num_meb));

WriteLn(f, inttostr(inv_num_invent));

 

CloseFile (f);

 

end;

 

////////////////////////////

procedure TabPerson;

var

s,s1:string;

surname, pass, rost, ves, nomer: string;

passport, flat: integer;

i, n: integer;

List:TStringlist;

begin

{List:=TStringlist.Create;

passport:= 999999999;

for i:= 0 to 9 do

begin

//Паспорт

inc(passport);

flat:= 1 + random (199);

//Фамилия

List.LoadFromFile('C:\docs\RAD Studio\Projects\TOBD\surname100.txt');

n:= random (List.Count - 1);

surname:= List[n];

 

//Номер

n:= random (98) +1;

pass:= inttostr(passport);

ves:= inttostr(0);

rost:= inttostr(0);

nomer:= inttostr (n);

 

//s:='insert into [Person] values ('+ inttostr(passport)+ ',"' +surname+'","' +surname+'","' +surname+'","' +surname+'","' +surname+'","' +surname+'","' +surname+'","' +surname+'",'+ inttostr(flat)+ ')';

//s1:='select * FROM [Person]';

s:='insert into [Player] values ('+ pass+ ',"' +rost+'","'+ves+ '","'+''+'","'+''+'","'+nomer+'")';

s1:='select * FROM [Player]';

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add(s);

ADOQuery1.ExecSQL;

ADOQuery1.SQL.Clear;

 

ADOQuery1.SQL.Add(s1);

ADOQuery1.Active:=True;

end; }

end;

 

procedure tabINV_ID;

var

i: integer;

begin

inc (inv_id);

all_count:= all_count + 4;

if naimenovanie = 'Тренажер' then

begin

i:= random (length (mas2) - 1);

num:= mas2[i]

end

else

begin

i:= random (length (mas1) - 1);

num:= mas1[i]

end;

 

s:='insert into [INV_IN_ZAL] values ('+ inttostr(inv_id)+ ',"'+ ddate+'","'+ inttostr(num)+ '",'+inttostr(inv_num_invent)+')';

s1:='select * FROM [INV_IN_ZAL]';

with Form1 do

begin

ADOQuery10.SQL.Clear;

ADOQuery10.SQL.Add(s);

ADOQuery10.ExecSQL;

ADOQuery10.SQL.Clear;

 

ADOQuery10.SQL.Add(s1);

// ADOQuery5.Active:=True;

 

 

end;

end;

 

/////////////////////////////

procedure TabINVENUM;

begin

all_count:= all_count + 2;

case case_inv of

0:

begin

s:='insert into [INVNUM_TEC] values ('+ inttostr(inv_num_tec)+ ','+inttostr(code_obj)+')';

s1:='select * FROM [INVNUM_TEC]';

with Form1 do

begin

ADOQuery5.SQL.Clear;

ADOQuery5.SQL.Add(s);

ADOQuery5.ExecSQL;

ADOQuery5.SQL.Clear;

 

ADOQuery5.SQL.Add(s1);

// ADOQuery5.Active:=True;

 

 

end;

end;

1: begin

s:='insert into [INVNUM_MEB] values ('+ inttostr(inv_num_meb)+ ','+inttostr(code_obj)+')';

s1:='select * FROM [INVNUM_MEB]';

with Form1 do

begin

ADOQuery6.SQL.Clear;

ADOQuery6.SQL.Add(s);

ADOQuery6.ExecSQL;

ADOQuery6.SQL.Clear;

 

ADOQuery6.SQL.Add(s1);

// ADOQuery6.Active:=True;

 

 

end;

end;

2: begin

s:='insert into [INVNUM_INV] values ('+ inttostr(inv_num_invent)+ ','+inttostr(code_obj)+')';

s1:='select * FROM [INVNUM_INV]';

with Form1 do

begin

ADOQuery7.SQL.Clear;

ADOQuery7.SQL.Add(s);

ADOQuery7.ExecSQL;

ADOQuery7.SQL.Clear;

 

ADOQuery7.SQL.Add(s1);

// ADOQuery7.Active:=True;

 

 

end;

tabINV_ID;

end;

end;

 

end;

 

/////////////////////////////

procedure TabTECHNO;

var

i: longint;

t: integer;

naimenovanie, firm, model: string;

begin

all_count:= all_count + 4;

inc(inv_num_tec);

 

t:= random (3); //Наименование

case t of

0: naimenovanie:= 'Телевизор';

1: naimenovanie:= 'Фен';

2: naimenovanie:= 'Стиральная машинка';

end;

 

t:= random (3); //Фирма

case t of

0: firm:= 'Panasonic';

1: firm:= 'Samsung';

2: firm:= 'LG';

end;

 

t:= random (3); //Модель

case t of

0: model:= 'AEJDL82732K';

1: model:= 'SDM29FN3SAD';

2: model:= 'FSDFKASD83Y';

end;

 

s:='insert into [TECHNO] values ('+ inttostr(code_obj)+ ',"'+ naimenovanie+'","'+firm+ '","'+model+'")';

s1:='select * FROM [TECHNO]';

with Form1 do

begin

ADOQuery2.SQL.Clear;

ADOQuery2.SQL.Add(s);

ADOQuery2.ExecSQL;

ADOQuery2.SQL.Clear;

 

ADOQuery2.SQL.Add(s1);

// ADOQuery2.Active:=True;

// ADOTable2.Active:= true;

// DBGrid2.Refresh;

 

end;

case_inv:= 0;

TabINVENUM;

end;

 

 

/////////////////////////////

procedure TabMEBEL;

var

//inv_i: longint;

length, width, height, t: integer;

naimenovanie, firm: string;

begin

all_count:= all_count + 6;

inc(inv_num_meb);

 

t:= random (4); //Наименование

case t of

0: naimenovanie:= 'Диван';

1: naimenovanie:= 'Кровать';

2: naimenovanie:= 'Стул';

3: naimenovanie:= 'Стол';

end;

 

t:= random (3); //Фирма

case t of

0: firm:= 'ЯрМебель';

1: firm:= 'Курский мебельный завод';

2: firm:= 'Славянушка';

end;

 

length:= (10 + random (10)) * 10; //Длина

width:= (5 + random (8)) * 10; //Ширина

height:= (5 + random (8)) * 10; //Высота

 

s:='insert into [MEBEL] values ('+ inttostr(code_obj)+ ',"'+ naimenovanie+'","'+firm+ '",'+ inttostr(length)+','+ inttostr(width)+','+ inttostr(height)+')';

s1:='select * FROM [MEBEL]';

with Form1 do

begin

ADOQuery3.SQL.Clear;

ADOQuery3.SQL.Add(s);

ADOQuery3.ExecSQL;

ADOQuery3.SQL.Clear;

 

ADOQuery3.SQL.Add(s1);

// ADOQuery3.Active:=True;

end;

case_inv:= 1;

TabINVENUM;

end;

 

/////////////////////////////

procedure TabINVENTAR;

var

//inv_i, i: longint;

t: integer;

firm, model: string;

begin

all_count:= all_count + 4;

inc(inv_num_INVENT);

 

t:= random (4); //Наименование

case t of

0: naimenovanie:= 'Мяч';

1: naimenovanie:= 'Тренажер';

2: naimenovanie:= 'Бутцы';

3: naimenovanie:= 'Форма';

end;

 

t:= random (3); //Фирма

case t of

0: firm:= 'Select';

1: firm:= 'Hummer';

2: firm:= 'Московский СпортИнвентарь';

end;

 

t:= random (3); //Модель

case t of

0: model:= 'ASDLAKSD3J3';

1: model:= 'ASD312D1DAD';

2: model:= 'IJUQWEE2NGY';

end;

s:='insert into [INVENTAR] values ('+ inttostr(code_obj)+ ',"'+ naimenovanie+'","'+firm+ '","'+model+'")';

s1:='select * FROM [INVENTAR]';

with Form1 do

begin

ADOQuery4.SQL.Clear;

ADOQuery4.SQL.Add(s);

ADOQuery4.ExecSQL;

ADOQuery4.SQL.Clear;

 

ADOQuery4.SQL.Add(s1);

// ADOQuery4.Active:=True;

end;

case_inv:= 2;

TabINVENUM;

end;

 

/////////////////////////////

procedure TecMebInvCASE;

var

//inv_i: longint;

t: integer;

begin

begin

t:= random (3);

case t of

0: TabTECHNO;

1: TabMEBEL;

2: TabINVENTAR;

end;

end;

end;

 

procedure TabArrival_Obj;

var

i: longint;

kol, price, ddate_temp: integer;

 

List:TStringlist;

begin

all_count:= all_count + 3;

// code_obj:= 19667;

// for i:= Z1 to Z2 do

while all_count < 1001000 do

 

begin

inc (code_obj);

//Form1.label8.Caption:= inttostr(code_obj);

// kol:= 1 + random (10);

//

ddate_temp:= 1 + random (29);

ddate:= inttostr (ddate_temp)+'.'; //число

if ddate_temp < 29 then ddate_temp:= 1+random (11)

else

begin

ddate_temp:= 1+random (11);

if ddate_temp = 2 then inc(ddate_temp);

end;

ddate:= ddate + inttostr (ddate_temp)+'.'; // месяц

ddate_temp:= 1999 + random (14);

ddate:= ddate + inttostr (ddate_temp);

//

price:= (10 + random (90)) * 1000;

//

 

s:='insert into [ARRIVAL_OBJ] values ('+ inttostr(code_obj)+ ',"'+ddate+ '","'+inttostr(price)+'")';

s1:='select * FROM [ARRIVAL_OBJ]';

with Form1 do

begin

ADOQuery1.SQL.Clear;

ADOQuery1.SQL.Add(s);

ADOQuery1.ExecSQL;

ADOQuery1.SQL.Clear;

 

ADOQuery1.SQL.Add(s1);

// ADOQuery1.Active:=True;

end;

TecMebInvCASE;

end;

end;

 

 

////////////////////////////

 

 

procedure RefreshTabs;

begin

Form1.DBGrid1.Refresh;

Form1.DBGrid2.Refresh;

// Form1.DBGrid3.Refresh;

// Form1.DBGrid4.Refresh;

// Form1.ADOTable1.Active:= False;

// Form1.ADOTable1.Active:= True;

// Form1.DBGrid1.DataSource:= DataSource1;

end;

 

procedure TForm1.Button10Click(Sender: TObject);

var

sss1, sss2, sss3: string;

t1,t2: TDateTime;

Hr,min,sec,msec: Word;

 

begin

 

 

sss1:= 'SELECT price.code_object, price.price, firm.naimenovanie, square.num_p, square.square FROM (ZAL INNER JOIN square ON ZAL.num_p = square.num_p) INNER JOIN (((price INNER JOIN firm ON ';

sss2:= 'price.code_object = firm.code_object) INNER JOIN INVNUM_INV ON firm.code_object = INVNUM_INV.code_object) INNER JOIN INV_IN_ZAL ON INVNUM_INV.inv_number = INV_IN_ZAL.inv_number) ON ZAL.num_p = INV_IN_ZAL.num_p;';

//sss3:= ' ON ZAL.num_p = INV_IN_ZAL.num_p) ON (INV_IN_ZAL.num_p = POMESHENIE.num_p) AND (POMESHENIE.num_p = ZAL.num_p) WHERE (((ARRIVAL_OBJ.price)>92000) AND ((POMESHENIE.square)<47) AND ((INVENTAR.firm)="Московский СпортИнвентарь"));';

 

t1:= time;

ADOQuery11.SQL.Text:= sss1+sss2;

 

// ADOQuerry11.sql

 

// label20.Caption:= 'DecodeTime: ' +inttostr (msec);

// label20.Caption:= 'GetTickCount: ' + inttostr ();

 

t2:= time;

DecodeTime (T2-T1,Hr,min,sec,msec);

label20.Caption:= 'DecodeTime: '+inttostr (msec);

ADOQuery11.Active:= True;

end;

 

 

procedure TForm1.Button11Click(Sender: TObject);

var

sss1, sss2, sss3: string;

t1,t2: TDateTime;

Hr,min,sec,msec: Word;

 

begin

 

 

sss1:= 'SELECT ARRIVAL_OBJ.code_object, ARRIVAL_OBJ.price, INVENTAR.naimenovanie,POMESHENIE.num_p, POMESHENIE.square FROM (((select * from ARRIVAL_OBJ where ((ARRIVAL_OBJ.price)>92000)) as O) INNER JOIN ((select * from INVENTAR where';

sss2:= ' ((INVENTAR.firm)="Московский СпортИнвентарь")) as I) ON O.code_object = I.code_object) INNER JOIN ((ZAL INNER JOIN (INVNUM_INV INNER JOIN INV_IN_ZAL ON INVNUM_INV.inv_number = INV_IN_ZAL.inv_number) ON ZAL';

sss3:= '.num_p = INV_IN_ZAL.num_p) INNER JOIN ((select * from POMESHENIE where ((POMESHENIE.square)<47)) as S) ON ZAL.num_p = S.num_p) ON I.code_object = INVNUM_INV.code_object;';

 

t1:= time;

ADOQuery11.SQL.Text:= sss1+sss2+sss3;

 

// ADOQuerry11.sql

 

// label20.Caption:= 'DecodeTime: ' +inttostr (msec);

// label20.Caption:= 'GetTickCount: ' + inttostr ();

 

 

ADOQuery11.Active:= True;

t2:= time;

DecodeTime (T2-T1,Hr,min,sec,msec);

label20.Caption:= 'DecodeTime: '+inttostr (msec);

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

RefreshTabs;

end;

 

 

procedure TForm1.Button2Click(Sender: TObject);

begin

//table:= ADOTable1.TableName;

ADOQuery10.SQL.Text:= 'DELETE * FROM ' + ADOTable10.TableName;

ADOQuery10.ExecSQL;

 

ADOQuery9.SQL.Text:= 'DELETE * FROM ' + ADOTable9.TableName;

ADOQuery9.ExecSQL;

 

ADOQuery8.SQL.Text:= 'DELETE * FROM ' + ADOTable8.TableName;

ADOQuery8.ExecSQL;

 

ADOQuery7.SQL.Text:= 'DELETE * FROM ' + ADOTable7.TableName;

ADOQuery7.ExecSQL;

 

ADOQuery6.SQL.Text:= 'DELETE * FROM ' + ADOTable6.TableName;

ADOQuery6.ExecSQL;

 

ADOQuery5.SQL.Text:= 'DELETE * FROM ' + ADOTable5.TableName;

ADOQuery5.ExecSQL;

 

ADOQuery4.SQL.Text:= 'DELETE * FROM ' + ADOTable4.TableName;

ADOQuery4.ExecSQL;

 

ADOQuery3.SQL.Text:= 'DELETE * FROM ' + ADOTable3.TableName;

ADOQuery3.ExecSQL;

 

ADOQuery2.SQL.Text:= 'DELETE * FROM ' + ADOTable2.TableName;

ADOQuery2.ExecSQL;

 

ADOQuery1.SQL.Text:= 'DELETE * FROM ' + ADOTable1.TableName;

ADOQuery1.ExecSQL;

 

inv_id:= 0;

 

all_count:= 0;

 

 

code_obj:= 0;

inv_num_tec:= 999999;

inv_num_meb:= 999999;

inv_num_invent:= 999999;

 

FileWr;

 

// ADOQuery2.Active:= True;

// Form1.DBGrid1.Refresh;

// Form1.DBGrid2.Refresh;

{ ADOQuery3.SQL.Text:= 'DELETE * FROM ' + ADOTable3.TableName;

ADOQuery3.ExecSQL;

 

ADOQuery4.SQL.Text:= 'DELETE * FROM ' + ADOTable4.TableName;

ADOQuery4.ExecSQL; }

end;

 

procedure TForm1.Button3Click(Sender: TObject);

begin

TabArrival_Obj;

Form1.label8.Caption:= inttostr(code_obj);

label9.Caption:= 'invnum_tec: ' + inttostr(inv_num_tec);

label10.Caption:= 'invnum_meb: ' + inttostr(inv_num_meb);

label11.Caption:= 'invnum_invent: ' + inttostr(inv_num_invent);

label19.Caption:= 'all_count: ' + inttostr(all_count);

//RefreshTabs;

FileWr;

end;

 

procedure TForm1.Button4Click(Sender: TObject);

begin

ADOQuery1.Active:= true;

ADOQuery2.Active:= true;

ADOQuery3.Active:= true;

ADOQuery4.Active:= true;

ADOQuery5.Active:= true;

ADOQuery6.Active:= true;

ADOQuery7.Active:= true;

ADOQuery8.Active:= true;

ADOQuery9.Active:= true;

ADOQuery10.Active:= true;

end;

 

procedure TForm1.Button5Click(Sender: TObject);

begin

ADOQuery1.Active:= false;

ADOQuery2.Active:= false;

ADOQuery3.Active:= false;

ADOQuery4.Active:= false;

ADOQuery5.Active:= false;

ADOQuery6.Active:= false;

ADOQuery7.Active:= false;

ADOQuery8.Active:= false;

ADOQuery9.Active:= false;

ADOQuery10.Active:= false;

end;

 

procedure TForm1.Button6Click(Sender: TObject);

begin

Z2:= code_obj + strtoint(Edit1.Text) -1;

label13.Caption:= 'Z2 = ' + inttostr(Z2 + 1);

end;

 

procedure TForm1.Button7Click(Sender: TObject);

var

i, t: integer;

square: integer;

number: integer;

naznachenie: string;

type_zal: string;

begin

all_count:= 300;

setlength (mas1, 0);

setlength (mas2, 0);

//////// POMESHENIE ////////

num:= 0;

for I:= 0 to 49 do

begin

inc(num); // №

square:= 45 + random (15); // Площадь

// t:= random (3);

naznachenie:= 'Занятие спортом'; //Назначение

 

s:='insert into [POMESHENIE] values ('+ inttostr(num)+ ',"'+ inttostr(square)+'","'+naznachenie+'")';

s1:='select * FROM [POMESHENIE]';

with Form1 do

begin

ADOQuery8.SQL.Clear;

ADOQuery8.SQL.Add(s);

ADOQuery8.ExecSQL;

ADOQuery8.SQL.Clear;

 

ADOQuery8.SQL.Add(s1);

 

end;

//////////// ZAL ////////////

number:= num;

t:= random (2);

case t of

0: begin

setlength (mas1, length(mas1) + 1);

mas1[length(mas1)-1]:= number;

type_zal:= 'Игровой зал';

end;

1:

begin

setlength (mas2, length(mas2) + 1);

mas2[length(mas2)-1]:= number;

type_zal:= 'Зал обшей физической подготовки';

end;

// 2: type_zal:= 'Манеж';

end;

s:='insert into [ZAL] values ('+ inttostr(num)+ ',"'+ type_zal+'","'+ inttostr(number)+'")';

s1:='select * FROM [ZAL]';

with Form1 do

begin

ADOQuery9.SQL.Clear;

ADOQuery9.SQL.Add(s);

ADOQuery9.ExecSQL;

ADOQuery9.SQL.Clear;

 

ADOQuery9.SQL.Add(s1);

 

end;

//////// INV_IN_ZAL ////////

 

end;

end;

 

procedure TForm1.Button8Click(Sender: TObject);

begin

ADOQuery8.SQL.Text:= 'DELETE * FROM ' + 'POMESHENIE';

ADOQuery8.ExecSQL;

 

ADOQuery9.SQL.Text:= 'DELETE * FROM ' + 'ZAL';

ADOQuery9.ExecSQL;

 

ADOQuery10.SQL.Text:= 'DELETE * FROM ' + 'INV_IN_ZAL';

ADOQuery10.ExecSQL;

end;

 

procedure TForm1.Button9Click(Sender: TObject);

var

sss1, sss2, sss3: string;

t1,t2: TDateTime;

Hr,min,sec,msec: Word;

begin

 

sss1:= 'SELECT ARRIVAL_OBJ.code_object, ARRIVAL_OBJ.price, INVENTAR.naimenovanie, POMESHENIE.num_p, POMESHENIE.square FROM POMESHENIE INNER JOIN (ZAL INNER JOIN (((ARRIVAL_OBJ INNER JOIN INVENTAR ON ARRIVAL_OBJ.code_object ';

sss2:= '= INVENTAR.code_object) INNER JOIN INVNUM_INV ON (ARRIVAL_OBJ.code_object = INVNUM_INV.code_object) AND (INVENTAR.code_object = INVNUM_INV.code_object)) INNER JOIN INV_IN_ZAL ON INVNUM_INV.inv_number = INV_IN_ZAL.inv_number)';

sss3:= ' ON ZAL.num_p = INV_IN_ZAL.num_p) ON (INV_IN_ZAL.num_p = POMESHENIE.num_p) AND (POMESHENIE.num_p = ZAL.num_p) WHERE (((ARRIVAL_OBJ.price)>92000) AND ((POMESHENIE.square)<47) AND ((INVENTAR.firm)="Московский СпортИнвентарь"));';

 

//ADOQuery11.SQL.Clear;

t1:= time;

 

ADOQuery11.SQL.Text:= sss1+sss2+sss3;

{ADOQuery11.SQL.Clear;

ADOQuery11.SQL.Text:= sss1+sss2+sss3;

ADOQuery11.SQL.Clear;

ADOQuery11.SQL.Text:= sss1+sss2+sss3;

ADOQuery11.SQL.Clear;

ADOQuery11.SQL.Text:= sss1+sss2+sss3; }

// ADOQuery11.SQL.Clear;

{ADOQuery11.SQL.Add(sss1);

ADOQuery11.ExecSQL;

ADOQuery11.SQL.Clear;

 

ADOQuery11.SQL.Add(sss2);

 

ADOQuery11.ExecSQL;

ADOQuery11.SQL.Clear;

 

ADOQuery11.SQL.Add(sss3); }

// ADOQuerry11.sql

ADOQuery11.Active:= True;

t2:= time;

DecodeTime (T2-T1,Hr,min,sec,msec);

label20.Caption:= 'DecodeTime: '+inttostr (msec);

 

end;

 

procedure TForm1.FormCreate(Sender: TObject);

var

f: Textfile;

s: string;

begin

//TabArrival_Obj;

//button1.Click();

//TabArrival_Obj;

 

//inv_num_tec:=1006758;

//inv_num_meb:=1006494;

//inv_num_invent:=1006410;

 

AssignFile (f, 'ids.txt'); //открыли файл

reset(f);

ReadLn(f, s);

code_obj:= strtoint (s);

label8.Caption:= inttostr (code_obj);

//

ReadLn(f, s);

inv_num_tec:= strtoint (s);

label9.Caption:= label9.Caption + inttostr (inv_num_tec);

//

ReadLn(f, s);

inv_num_meb:= strtoint (s);

label10.Caption:= label10.Caption + inttostr (inv_num_meb);

//

ReadLn(f, s);

inv_num_invent:= strtoint (s);

label11.Caption:= label11.Caption + inttostr (inv_num_invent);

//

CloseFile (f);

Z1:= code_obj;

Z2:= code_obj+1000;

label13.Caption:= 'Z2 = ' + inttostr(Z2);

 

//////////////

{ADOQuery4.SQL.Text:= 'select count(*) as cnt from INVENTAR';

try

ADOQuery4.Open;

Label20.Caption:= ADOQuery4.FieldByName('CNT').AsString;

finally

ADOQuery4.Close;

end; }

//////////////

{ ADOQuery1.SQL.Text:= 'select count(*) as cnt from ARRIVAL_OBJ';

try

ADOQuery1.Open;

Label20.Caption:= ADOQuery1.FieldByName('CNT').AsString;

finally

ADOQuery1.Close;

end; }

///////////////

///

 

ADOQuery4.SQL.Text:= 'Select * from [INVENTAR]';

 

end;

 

end.

Курсовая работа

 

По дисциплине «Теория оптимизации баз данных»

На тему: «Оптимизация базы данных «Хозяйственный учет футбольного клуба»

 

Направление подготовки 010503.65 «Математическое обеспечение и администрирование информационных систем»

Специальность «Информационные системы»

 

Выполнил:

студент 413 гр. Анурьев Н.О.

 

Руководитель работы:

ассистент кафедры ПОиАИС Ураева E.E

 

 

Оценка ____________________________ «__________» 20_____г.

 

Члены экспертной комиссии:

доцент, кандидат технических наук Белов В.Г.

 

ассистент кафедры ПОиАИС Ураева E.E

 

 

Курск 2014


СОДЕРЖАНИЕ

СОДЕРЖАНИЕ.. 2

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

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

1.1.1. Название предметной области и ее краткое описание. 3

1.1.2. Объекты предметной области. 3

1.1.3. Процессы взаимодействия между объектами, происходящие в предметной области. 4

1.2. Формализованное описание предметной области. 5

1.2.1. Словарь терминов для объектов и элементов данных. 5

1.2.2. Первичные и альтернативные ключи……………………………………………...................………………10

1.2.3. Диаграмма сущность – связь для предметной области. 11

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

2.1. Функциональные зависимости для отношений предметной области. 12

2.1.1. Ключевые функциональные зависимости. 12

2.1.2. Не ключевые функциональные зависимости. 13

2.1.3. Функциональные зависимости для сохранения иерархии. 13

2.1.4. Функциональные зависимости для устранения потери информации при соединении. 13

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

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

3.1 Построение неизбытычного покрытия. 17

3.2. Построение леворедуцированного покрытия. 26

3.3. Построение праворедуцированного покрытия. 27

 


4. Минимальное кольцевое редуцированное покрытие системы функциональных зависимостей 29

4.1. Естественно-характеристическое множество. 30

4.2. Диаграмма сущность – связь, построенная на основании минимального кольцевого редуцированного покрытия множества функциональных зависимостей. 30

4.3. Физическая структура базы данных. 31

5. Построение запросов на языке SQL.. 32

5.1. Многотабличный запрос на выборку по условию нескольких строк и логической формулы условий столбцов. 32

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

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

5.1.4. Временные характеристики исходного запроса. 34

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

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

5.1.7. Временные характеристики оптимизированного запроса. 40

5.2. Многотабличный запрос на выборку по условию нескольких строк и логической формулы условий столбцов с использованием "or". 42

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

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

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

Заключение................................................................................................................................................................................................... 46

Приложение 1. 47

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

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



Поделиться:


Последнее изменение этой страницы: 2016-04-18; просмотров: 229; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.21.46.24 (0.01 с.)