Смекни!
smekni.com

Реляційна база данних трудової книжки (стр. 2 из 3)

Одним з основних вимог до СУБД, взагалі, і до System R, зокрема, є забезпечення надійності баз даних стосовно різного роду збоям. До таких збоїв можуть ставитися програмні помилки прикладного й системного рівня, збої процесора, поломки зовнішніх носіїв і т.д. Зокрема, до одному з видів збоїв можна віднести згадувані вище порушення цілісності бази даних й автоматичний, ініциіруємий системою відкіт транзакції - це системний засіб відновлення бази даних після збоїв такого роду. Як ми відзначали, відновлення відбувається шляхом зворотного виконання транзакції на основі інформації про внесені нею змінах, зафіксованих у журналі. На інформації журналу засноване відновлення бази даних і після збоїв іншого роду. Керування журнализацией і відновленням в System R досить цікаво, застосовувані методи в ряді випадків відрізняються від методів, використовуваних в інших СУБД.

Що стосується природних вимог до ефективності системи, те тут основні рішення зв'язані зі специфікою фізичної організації баз даних на зовнішній пам'яті, буферизацієй використовуваних сторінок бази даних в оперативній пам'яті й розвитий технікою оптимізації запитів, сформульованих на SQL, виробленої на стадії їхньої компіляції.

Структурна організація System R цілком погодиться з поставленими при її розробці цілями й обраними рішеннями. Основними структурними компонентами System R є система керування реляционной пам'яттю (Relational Storage System - RSS) і компілятор запитів мови SQL. RSS забезпечує інтерфейс досить низького, але достатнього для реалізації SQL рівня для доступу до збережених даних. Синхронізація транзакцій, журнализация змін і відновлення баз даних після збоїв також ставляться до числа функцій RSS. Компілятор запитів використає інтерфейс RSS для доступу до різноманітної довідкової інформації (каталоги відносин, індексів, прав доступу, умов цілісності, умовних впливів і т.д.) і робить робочі програми, виконувані надалі також з використанням інтерфейсу RSS. Таким чином, система природно розділяється на два рівні: рівень керування пам'яттю й синхронізацією, фактично, що не залежить від базової мови запитів системи, і мовний рівень (рівень SQL), на якому вирішується більшість проблем System R. Помітимо, що ця незалежність скоріше умовна, чим абсолютна: мова SQL можна замінити на іншу мову, але він повинен мати приблизно таку ж семантику.

Далі ми послідовно розглянемо особливості організації RSS, процес компіляції й оптимізації запитів і техніку виконання відкомпільованих транзакцій (включаючи відзначену вище можливість динамічної компіляції запитів).


Практична частина

Лістінг програм

Головний програма БД – ТРУДОВА КНИЖКА.

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit9.h"

#include "Unit22.h"

#include "Unit23.h"

#include "Unit4.h"

#include "Unit24.h"

#include "Unit27.h"

#include "Unit28.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

Tzarplata *zarplata;

Tz_nastr *z_nastr;

extern TOKBottomDlg *OKBottomDlg;

extern TForm4 *Form4;

extern Talgo *algo;

//---------------------------------------------------------------------------

__fastcall Tzarplata::Tzarplata(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall Tzarplata::N9Click(TObject *Sender)

{

z_nastr->Table1->Close();

z_nastr->Table1->TableName = "z_nastr_const_nar";

z_nastr->Table1->Open();

z_nastr->Caption = "Настроювання констант нарахування";

z_nastr->ShowModal();

}

//---------------------------------------------------------------------------

void __fastcall Tzarplata::N6Click(TObject *Sender)

{

z_nastr->Table1->Close();

z_nastr->Table1->TableName = "z_nastr_vch_stavka_osv";

z_nastr->Table1->Open();

z_nastr->Caption = "Ставка за освітою";

z_nastr->ShowModal();

}

//---------------------------------------------------------------------------

void __fastcall Tzarplata::N10Click(TObject *Sender)

{

z_nastr->Table1->Close();

z_nastr->Table1->TableName = "z_nastr_vch_visluga";

z_nastr->Table1->Open();

z_nastr->Caption = "Надбавка за вислугу років";

z_nastr->ShowModal();

}

//---------------------------------------------------------------------------

void __fastcall Tzarplata::N13Click(TObject *Sender)

{

z_nastr->Table1->Close();

z_nastr->Table1->TableName = "z_nastr_const_vidr";

z_nastr->Table1->Open();

z_nastr->Caption = "Настроювання констант відрахування";

z_nastr->ShowModal();

}

//---------------------------------------------------------------------------

void __fastcall Tzarplata::N12Click(TObject *Sender)

{

z_nastr->Table1->Close();

z_nastr->Table1->TableName = "z_nastr_likarnyani";

z_nastr->Table1->Open();

z_nastr->Caption = "Нарахування лікарняних";

z_nastr->ShowModal();

}

//---------------------------------------------------------------------------

void __fastcall Tzarplata::N14Click(TObject *Sender)

{

z_nastr->Table1->Close();

z_nastr->Table1->TableName = "z_nastr_derzsluz_visluga";

z_nastr->Table1->Open();

z_nastr->Caption = "Держслужбовці - вислуга";

z_nastr->ShowModal();

}

//---------------------------------------------------------------------------

void __fastcall Tzarplata::N7Click(TObject *Sender)

{

z_nastr->Table1->Close();

z_nastr->Table1->TableName = "z_nastr_vch_kateg";

z_nastr->Table1->Open();

z_nastr->Caption = "Вчителі - надбавка за категорію";

z_nastr->ShowModal();

}

//---------------------------------------------------------------------------

void __fastcall Tzarplata::N8Click(TObject *Sender)

{

z_nastr->Table1->Close();

z_nastr->Table1->TableName = "z_nastr_vch_kruzok";

z_nastr->Table1->Open();

z_nastr->Caption = "Вчителі - за кружок";

z_nastr->ShowModal();

}

//---------------------------------------------------------------------------

void __fastcall Tzarplata::N11Click(TObject *Sender)

{

z_nastr->Table1->Close();

z_nastr->Table1->TableName = "z_nastr_vch_perevirkazosh";

z_nastr->Table1->Open();

z_nastr->Caption = "Вчителі - перевірка зошитів";

z_nastr->ShowModal();

}

//---------------------------------------------------------------------------

void __fastcall Tzarplata::N15Click(TObject *Sender)

{

z_nastr->Table1->Close();

z_nastr->Table1->TableName = "z_nastr_spivrob_posadi";

z_nastr->Table1->Open();

z_nastr->Caption = "Співробітники (інші) - посади";

z_nastr->ShowModal();

}

//---------------------------------------------------------------------------

void __fastcall Tzarplata::N16Click(TObject *Sender)

{

z_nastr->Table1->Close();

z_nastr->Table1->TableName = "z_nastr_derzsluz_rang";

z_nastr->Table1->Open();

z_nastr->Caption = "Держслужбовці - ранг";

z_nastr->ShowModal();

}

//---------------------------------------------------------------------------

void __fastcall Tzarplata::N17Click(TObject *Sender)

{

z_nastr->Table1->Close();

z_nastr->Table1->TableName = "z_nastr_derzsluz_intensiv";

z_nastr->Table1->Open();

z_nastr->Caption = "Держслужбовці - інтенсивність";

z_nastr->ShowModal();

}

//---------------------------------------------------------------------------

void __fastcall Tzarplata::N18Click(TObject *Sender)

{

z_nastr->Table1->Close();

z_nastr->Table1->TableName = "z_nastr_derzsluz_premiya";

z_nastr->Table1->Open();

z_nastr->Caption = "Держслужбовці - премія";

z_nastr->ShowModal();

}

//---------------------------------------------------------------------------

void __fastcall Tzarplata::N3Click(TObject *Sender)

{

Form4->subkid = 22;

Form4->Button4->Enabled=true;

Form4->ShowModal();

vhidzarp->potoch=0;

vhidzarp->ShowModal();

}

//---------------------------------------------------------------------------

void __fastcall Tzarplata::N4Click(TObject *Sender)

{

Form4->subkid = 22;

Form4->Button4->Enabled=true;

Form4->ShowModal();

algo->ShowModal();

}

//---------------------------------------------------------------------------

void __fastcall Tzarplata::N20Click(TObject *Sender)

{

z_nastr->Table1->Close();

z_nastr->Table1->TableName = "z_nastr_derzsluz_posada";

z_nastr->Table1->Open();

z_nastr->Caption = "Держслужбовці - посади";

z_nastr->ShowModal();

}

//---------------------------------------------------------------------------

void __fastcall Tzarplata::N5Click(TObject *Sender)

{

z_nastr->Table1->Close();

z_nastr->Table1->TableName = "z_nastr_adm_posadi";

z_nastr->Table1->Open();

z_nastr->Caption = "Співробітники (адміністрація) - посади";

z_nastr->ShowModal();

}

//---------------------------------------------------------------------------

void __fastcall Tzarplata::N2Click(TObject *Sender)

{

z_oper->Show();

}

//---------------------------------------------------------------------------

void __fastcall Tzarplata::N19Click(TObject *Sender)

{

vhidzarp->potoch=1;

vhidzarp->ShowModal();

}

//---------------------------------------------------------------------------

Додаткові модулі для роботи з SQL запитами.

//---------------------------------------------------------------------------

#include <vcl.h>

#include <stdio.h>

#pragma hdrstop

#include "Unit24.h"

#include "Unit25.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma link "wwdblook"

#pragma resource "*.dfm"

Talgo *algo;

extern Tplusalgo *plusalgo;

int activeflag=1;

//---------------------------------------------------------------------------

__fastcall Talgo::Talgo(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall Talgo::Button1Click(TObject *Sender)

{

knopka();

}

//---------------------------------------------------------------------------

void __fastcall Talgo::wwDBLookupCombo1Change(TObject *Sender)

{

if(activeflag){

Query1->Close();

Query1->SQL->Clear();

Query1->SQL->Add(

"select constanta from z_nastr_vch_stavka_osv where id="+wwDBLookupCombo1->Text

);

Query1->Open();

}

}

//---------------------------------------------------------------------------

void __fastcall Talgo::DBCheckBox1Click(TObject *Sender)

{

Table1->Edit();

if(CheckBox1->Checked){

Table1->Fields->FieldByName("isvchitel")->AsInteger = 1;

GroupBox1->Visible=true;

}

else

{

Table1->Fields->FieldByName("isvchitel")->AsInteger = 0;

GroupBox1->Visible=false;

}

Table1->Post();

}

//---------------------------------------------------------------------------

void __fastcall Talgo::FormActivate(TObject *Sender)

{

activeflag=1;

AnsiString x="";

Query21->Close();

Query21->SQL->Clear();

Query21->SQL->Add(

"select content from variables where variables.var='subkobid'"

);

Query21->Open();

int skobid = Query21->Fields->FieldByName("content")->AsInteger;

Query21->Close();

Query21->SQL->Clear();

Query21->SQL->Add(

"select count(z_algo.id) as cnt from z_algo,variables where z_algo.skobid=variables.content and variables.var='subkobid'"

);

Query21->Open();

if(!(Query21->Fields->FieldByName("cnt")->AsInteger>0)){

Query21->Close();

Query21->SQL->Clear();

Query21->SQL->Add(

x+"insert into z_algo values( 0,"+skobid+",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) "

);

Query21->ExecSQL();

}

//Table1->Close();

Table1->Filtered=false;

Table1->Filter=x+"skobid = "+skobid;

Table1->Filtered=true;

Table1->Open();

Table2->Close();

Table2->Open();

// vchiteli

CheckBox1->Checked = Table1->Fields->FieldByName("isvchitel")->AsInteger ? true:false;

CheckBox3->Checked = Table1->Fields->FieldByName("iskategoriya")->AsInteger ? true:false;

CheckBox2->Checked = Table1->Fields->FieldByName("isnachskgod")->AsInteger ? true:false;

CheckBox4->Checked = Table1->Fields->FieldByName("isstklasigod")->AsInteger ? true:false;