3 Создание вторичных индексов

 

Для повышения производительности в таблицах «Работник», «Продукция», «Клиент» были созданы вторичные индексы.

Скрипты создания вторичных индексов

CREATE INDEX "Rabotnik_IDX1" ON "Rabotnik" ("R_Fio");

CREATE INDEX "Rabotnik_IDX2" ON "Rabotnik" ("Adres");

CREATE INDEX "Produkcia_IDX1" ON "Produkcia" ("Name");

CREATE INDEX "Produkcia_IDX2" ON "Produkcia" ("Cena");

CREATE UNIQUE INDEX "Klient_IDX1" ON "Klient" ("Name");

CREATE INDEX "Klient_IDX2" ON "Klient" ("Adres");

4 Права доступа

 

Транзакции 1,2 выполняет отдел кадров

Транзакции 3-6 - зав. делянками

Транзакции 9,7 - нач. базы

Транзакции 8,11,12 - нач. сбыта

Транзакции 10,13 - зав. складом

Приведем примеры таблиц и хранимых процедур.

Листинг процедуры добавления накладной на заказ товара

procedure TDob_Nakl_Zakaz.Button1Click(Sender: TObject);

var i,j:Integer;

 Ok:Boolean;

begin

 Ok:=False;

 if(not DM4.IBTrans_Write.Active)

 then DM4.IBTrans_Write.StartTransaction;

 j:=0;

 if((StringReplace(MaskEdit1.EditText,' ','',[rfReplaceAll])<>'') and

 (StringReplace(MaskEdit2.EditText,' ','',[rfReplaceAll])<>''))

 then

 begin

 DM4.IBSP_Dob_Nakl_Z.ParamByName('Name').AsString:=

 ComboBox1.Text;

 DM4.IBSP_Dob_Nakl_Z.ParamByName('Adres').AsString:=

 Edit2.Text;

 DM4.IBSP_Dob_Nakl_Z.ParamByName('Nomer').AsInteger:=

 StrToInt(StringReplace(MaskEdit1.Text,' ','',[rfReplaceAll]));

 DM4.IBSP_Dob_Nakl_Z.ParamByName('Srok').AsInteger:=

 StrToInt(StringReplace(MaskEdit2.Text,' ','',[rfReplaceAll]));

 DM4.IBSP_Dob_Nakl_Z.ParamByName('Data').AsDate:=

 DateTimePicker1.Date;

 try

 DM4.IBSP_Dob_Nakl_Z.Prepare;

 DM4.IBSP_Dob_Nakl_Z.ExecProc;

 Ok:=True;

 if(Ok) then

 begin

 for i:=1 to ValueListEditor1.RowCount-1 do

 begin

if(StringReplace(StringReplace(ValueListEditor1.Values[ValueListEditor1.Keys[i]],' ','',[rfReplaceAll]),'.',',',[rfReplaceAll])<>'')

 then

 begin

 DM4.IBSP_Dob_Str_Nakl_Z.ParamByName('NNakl_Zakaz').AsInteger:=

 StrToInt(StringReplace(MaskEdit1.EditText,' ','',[rfReplaceAll]));

 DM4.IBSP_Dob_Str_Nakl_Z.ParamByName('Naimen').AsString:=

 ValueListEditor1.Keys[i];

 DM4.IBSP_Dob_Str_Nakl_Z.ParamByName('Kolvo').AsFloat:=

StrToFloat(StringReplace(StringReplace(ValueListEditor1.Values[ValueListEditor1.Keys[i]],' ','',[rfReplaceAll]),'.',',',[rfReplaceAll]));

 DM4.IBSP_Dob_Str_Nakl_Z.ParamByName('Cena').AsFloat:=

 StrToFloat(ListBox1.Items[i-1]);

 DM4.IBSP_Dob_Str_Nakl_Z.Prepare;

 DM4.IBSP_Dob_Str_Nakl_Z.ExecProc;

 j:=j+1;

 end;

 end

 end;

 if((Ok) and (j<>0))

 then

 DM4.IBTrans_Write.Commit

 else ShowMessage('Ошибка добавления накладной !');

 except

 on E: Exception do

 begin

 if(Pos('Накладная с таким номером уже есть !!!',E.Message)<>0) then

 ShowMessage(' Накладная с таким номером уже есть !')

 else

 ShowMessage('Ошибка БД');

 DM4.IBTrans_Write.Rollback;

 end;

 end;

 end

 else ShowMessage('Введите номер накладной или срок выполнения !');

 end;

Листинг процедуры добавления лесобилета

procedure TDob_Lesobilet.Button1Click(Sender: TObject);

var i,j:Integer;

begin

 if(not DM1.IBTrans_Write.Active)

 then DM1.IBTrans_Write.StartTransaction;

 j:=0;

 try

 if(Kol_Del=0) then

 begin

 if(Trim(MaskEdit1.EditText)<>'') then

 begin

 DM1.IBSP_Dob_Lesobilet.ParamByName('Nomer').AsInteger:=

 StrToInt(Trim(MaskEdit1.EditText));

 DM1.IBSP_Dob_Lesobilet.ParamByName('Data').AsDate:=

 DateTimePicker1.Date;

 DM1.IBSP_Dob_Lesobilet.Prepare;

 DM1.IBSP_Dob_Lesobilet.ExecProc;

 Ok:=True;

 MaskEdit1.ReadOnly:=True;

 Kol_Del:=Kol_Del+1;

 end

 else

 begin

 ShowMessage('Введите номер лесобилета !');

 Ok:=False;

 end

 end;

 if((Ok) and (Trim(MaskEdit2.EditText)<>'') and

 (Trim(MaskEdit3.EditText)<>'*') and (Trim(MaskEdit4.EditText)<>','))

 then

 begin

 DM1.IBSP_Dob_Delanki.ParamByName('N_Delanka').AsInteger:=

 StrToInt(Trim(MaskEdit2.EditText));

 DM1.IBSP_Dob_Delanki.ParamByName('Kvadrat').AsString:=

 Trim(MaskEdit3.EditText);

 DM1.IBSP_Dob_Delanki.ParamByName('Plotschad').AsFloat:=

 StrToFloat(Trim(MaskEdit4.EditText));

 DM1.IBSP_Dob_Delanki.Prepare;

 DM1.IBSP_Dob_Delanki.ExecProc;

 DM1.IBSP_Dob_Str_Bilet.ParamByName('NLesobilet').AsInteger:=

 StrToInt(Trim(MaskEdit1.EditText));

 DM1.IBSP_Dob_Str_Bilet.ParamByName('NDelanka').AsInteger:=

 StrToInt(Trim(MaskEdit2.EditText));

 DM1.IBSP_Dob_Str_Bilet.Prepare;

 DM1.IBSP_Dob_Str_Bilet.ExecProc;

 for i:=1 to ValueListEditor1.RowCount-1 do

 begin

 if(ValueListEditor1.Values[ValueListEditor1.Keys[i]]<>'') then

 begin

 if(StrToFloat(ValueListEditor1.Values[ValueListEditor1.Keys[i]])>0)

 then

 begin

 DM1.IBSP_Dob_Nal_Drevesini.ParamByName('Kolvo').AsFloat:=

 StrToFloat(ValueListEditor1.Values[ValueListEditor1.Keys[i]]);

 DM1.IBSP_Dob_Nal_Drevesini.ParamByName('Poroda').AsString:=

 ValueListEditor1.Keys[i];

 DM1.IBSP_Dob_Nal_Drevesini.ParamByName('Nomer').AsInteger:=

 StrToInt(Trim(MaskEdit2.EditText));

 DM1.IBSP_Dob_Nal_Drevesini.Prepare;

 DM1.IBSP_Dob_Nal_Drevesini.ExecProc;

 end

 end

 else

 j:=j+1;

 end

 end;

 if((Ok) and (j<i)) then

 DM1.IBTrans_Write.Commit;

 except

 on E: Exception do

 begin

 if(Pos('Лесобилет с таким номером уже существует !!!',E.Message)<>0) then

 ShowMessage(' Лесобилет с таким номером уже существует !')

 else if(Pos(‘Делянка с таким номером уже существует !!!',E.Message)<>0) then

 ShowMessage(' Делянка с таким номером уже существует !')

 else

 ShowMessage('Ошибка БД !');

 DM1.IBTrans_Write.Rollback;

 end;

 end

end;


Информация о работе «Методология проектирования баз данных»
Раздел: Информатика, программирование
Количество знаков с пробелами: 51205
Количество таблиц: 17
Количество изображений: 4

Похожие работы

Скачать
77159
2
0

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

Скачать
17499
5
24

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

Скачать
40341
0
0

... на модели данных, реализованные в различных СУБД. Наибольшую популярность получили CASE-системы для реляционных СУБД с SQL-моделями данных, а DD/D переименовался в CASE-репозиторий проектируемой ИС. На этом пути возникло два основных направления развития CASE-систем и технологий проектирования: CASE-системы для проектирования собственно БД (или т. н. Upper-CASE) и интегрированные инструменты, ...

Скачать
35006
10
7

... компиляция концептуальной модели предметной области в схему БД). Второй вариант - прямая реализация СУБД, основанная на какой либо семантической модели данных. 2. Создание базы данных «Деканат: дистанционного обучения КТИ» 2.1 Краткая характеристика предметной области Предполагаемый деканат дистанционного образования Калмыцкого Технологического Института, именуемый в дальнейшем "ДДО КТИ ...

0 комментариев


Наверх