Elaborarea Si Gestionarea Bazei de Date Evidenta Tehnicii de Calcul la O Banca
Cuprins:
Cuprins: 3
Introducere. 5
1. Descrierea generală a SGBD InterBase 6
2. Descrierea instrucțiunilor ANSI SQL utilizate în SGDB InterBase. 8
2.1. CREATE DOMAIN 8
2.2. CREATE TABLE 11
2.3. CREATE TRIGGER 20
2.4. GRANT 26
2.5. REVOKE 30
2.6. CREATE GENERATOR 32
2.7. CREATE INDEX 33
2.8. INSERT 34
2.9. UPDATE 35
2.10. ROLLBACK 37
2.11. SELECT 38
3. Descrierea bazei de date “Evidenta tehnicii de calcul”, programului "Inside". 46
3.1. Descrierea structurii bazei de date “Evidenta tehnicii de calcul” 46
3.2. Descrierea programului “Inside” 48
4. Protecția muncii și sanitarie de producere 53
4.1. Zgomotul 54
4.2. Securitatea electrică 54
4.3. Microclimatul 55
4.4. Securitatea antiincendiară 56
4.5. Radiație 58
4.6. Parametrii vizuali a imaginii 59
4.7. Efecte psihofiziologice 60
4.8. Iluminatul 61
4.9. Calcularea iluminatului artificial a încăperii. 62
4.10. Ecologia. 64
5. Partea economică a proiectului. 65
5.1. Planificarea rețea pentru elaborarea BD “Evidenta tehnicii de calcul” 65
5.2. Evaluarea economică a Bazei de date “Evidenta tehnicii de calcul”…………………………….73
5.3. Calculul remunerarii muncii………………………………………………………………………………………….76
5.4 Cheltueli materiale utilizate la elaborarea proiectului ……………………………………………..79
5.5 Costul proiectului 79
5.6. Evaluarea eficacității de la implementarea bd “Evidenta tehnicii de calcul” 80
Încheiere. 81
Bibliografie. 82
ANEXE. 83
Anexa nr. 1. SQL scriptul pentru crearea bazei de date “Evidenta tehnicii de calcul”. 83
Anexa nr. 2. Structura bazei de date “Evidenta tehnicii de calcul”. 92
Anexa nr. 3. Forma pentru introducerea datelor in tabelul "Users". 93
Anexa nr. 4. Forma pentru introducerea datelor in tabelul "Rooms" 94
Anexa nr. 5. Forma pentru introducerea datelor referitoare la evidenta tehnicii de calcul 95
Anexa nr. 6. Graful-rețea pentru elaborarea BD “Evidenta tehnicii de calcul”……………..………………….96
Anexa nr.7. Evaluarea eficientei sociale de la implementarea BD“Evidenta tehnicii de calcul”……………………………………………………………………………………………………………….98
=== TEZA2 ===
Introducere.
În prezent produsele soft se implementează foarte rapid, din cauza dezvoltării enorme a tehnologiilor informaționale, acumulării cunoștințelor și bibliotecilor de date, creării rețelelor pentru comunicare și schimb de informații.
Produsul Inprise C++, utilizat pentru implementarea Bazei de date “Evidenta tehnicii de calcul Banca Sociala” se referă la mediul de programare de tip RAD – Rapid Application Development (Construirea rapidă a aplicațiilor). Aceste produs prezintă limbaje de programare de nivel înalt, orientate pe obiect, cu componente vizuale și biblioteci de clase gata pentru utilizare. Aceste biblioteci de componente sunt destinate pentru crearea cât mai rapidă a interfețelor pentru program, fie pentru crearea interfețelor de gestiune a programului de către utilizator sau a interfețelor de comunicare a programului cu alte programe. Pe lângă asigurarea creării rapide a interfețe aceste medii de programare acordă și o colecție de componente care sunt utilizate forte des de către programatori, de exemplu diferite metode de sortare deja implementate, arbori, liste, etc.
Sistemul informațional implementat se bazează pe baza de date și pe programele scrise care interacționează cu ea. Alegerea sistemului de gestiune al bazei de date este un lucru foarte important, deoarece trebuie de ținut cont de posibilitățile diferitor SGBD, de necesitățile lor pentru lucru (sistemul tehnic) și costul lor.
Revoluția informațională care a avut loc în ultimii ani în lume, în o foarte mare măsură este datorată apariției și dezvoltării bazelor de date relaționale. Standardizarea a permis ca datele de la un SGBD să fie transferate în alt SGBD fără măcar mici dificultăți. SGBD relaționale moderne permit manipularea foarte comodă cu datele, inclusiv toate sistemele bancare sunt realizate în asemenea SGBD.
Pentru implementarea bazei de date a sistemului informațional am ales SGBD InterBase care posedă caracteristicile unui SGBD de dimensiuni medii, care optimal corespunde cerințelor impuse de către sarcina de lucru.
1. Descrierea generală a SGBD InterBase
Sistemul de gestiune a bazei de date (SGBD) InterBase prezintă implementarea modernă a bazelor de date relaționale, bazate pe tranzacte. SGBD InterBase poate prelucra în paralel atât un volum mare de tranzacții mici cât și tranzacții cu prelucrarea de lungă durată datelor. InterBase are o tehnologie unică de delimitare a tranzacțiilor, care nu blochează comenzile de citire și înscriere, fiindcă tranzacțiile nu necesită blocarea tuplelor folosite. Și aceste tranzacții nu necesită programare adăugătoare.
Arhitectura sa SuperServer mărește performanța și optimizează resursele sistemului, în special pentru un număr mare de utilizatori, fiindcă este realizată pe prelucrare în procese paralele. Un concept de bază a arhitecturii SuperServer este colectarea centralizată a informației despre utilizatori, a statisticii despre Baza de Date și apelurile clienților. Aceasta permite păstrarea informației des utilizate în cache și îmbunătățește timpul de răspuns.
Instalarea serverului necesită doar 10 MB de memorie ceea ce ne permite să nu ne gândim la spațiu liber la instalare. Alt lucru la care nu trebuie de pierdut timpul este ajustarea parametrilor, fiindcă InterBase optimizează tranzacțiile pentru d-stă.
Să enumerăm unele din posibilitățile principale:
notificatorii de evenimente;
trighere;
proceduri stocate;
restricții de integritate a datelor.
Notificatorii de evenimente permit de a notifica pe cineva în cazul apariției unui eveniment concret, fără a apela Baza de Date în continuu. De exemplu, InterBase poate notifica un manager, prin e-mail, că în stoc se termină un produs oarecare.
Trigherele pot să asigure respectarea business regulilor pe server, astfel toate aplicațiile ce folosesc date corporative respectă aceste reguli automat. Cu atât mai mult că trigherele pot să automatizeze răspunsurile la evenimente pe server, de exemplu să ceară validarea datelor când un tuplu este schimbat.
Procedurile stocate permit mărirea vitezei de răspuns prin delegarea lucrărilor de rutină de la client la server. Totodată procedurile stocate încurajează proiectarea modulară și fac exploatarea și reutilizarea mai simplă și mai sigură prin limitarea operațiilor la cele definite în proceduri. Funcțiile definite de utilizatori extind capacitățile de calcul și posibilitățile de creare a operațiilor business dorite. InterBase are o bibliotecă de funcții standarde gata, astfel nu va trebui să începeți de la zero.
Restricțiile de integritate a datelor fac posibil menținerea relațiilor dintre tuplele păstrate în Baza de Date. InterBase asigură patru tipuri de restricții de integrității datelor:
Unique și Primary Key: asigură să nu existe două tuple cu același valori pentru o mulțime de coloane;
Integritatea referințelor în cascadă: validează relațiile părinte-copil între tabele pentru asigurarea sincronizării și modificările sau ștergerile în cascadă;
Check: condiția asociată va fi validată pentru orice tuplu al tabelului;
Domain: permite crearea tipurilor noi de date și specificării integrității la nivel de coloane. Domeniile pot fi utilizate pentru a specifica un segment de valori acceptabile sau o listă de valori valide și o valoare implicită. Aceasta înseamnă că după definirea domeniului, el poate fi utilizat în orice loc al aplicației ca o referință la un tip de date mai sofisticat.
În 1986, InterBase a elaborat primul SQL server cu suport a două tipuri de date avansate. BLOb (sunet, imagine, grafică sau informație binară) și masive multidimensionale (până la 16 dimensiuni într-un câmp). Aceasta a făcut ca InterBase să fie alegerea pentru aplicațiile științifice și multimedia cum atunci atât și acum. Azi, WWW și aplicațiile de telefonie utilizează BLOb foarte des pentru a oferi soluții multimedia. Și cu InterBase serverul este adoptat automat la utilizarea filtrelor, compresoarelor și convertoarelor de date, de exemplu să transforme o fotografie scanată într-un fișier jpeg.
Să admitem că doriți să mutați Baza de Date de pe un calculator pe o soluție Client/Server. Sau aveți nevoie să lărgiți aplicația în așa mod ca să fie utilizată de mai multe departamente. În orice caz, InterBase este o soluție ideală fiindcă el a fost proiectat în special pentru medii de Baze de Date distribuite.
InterBase poate prelucra tranzacțiile muli-server. Această posibilitate automat asigură ca modificările distribuite să fie acceptate (commited) fără vreo intervenție specială din partea aplicației. Când o tranzacție se extinde pe mai multe servere, InterBase automat apelează serverele pentru să se asigure că ele lucrează, apoi transmite instrucțiunea commit pentru a termina tranzacția. Pe lângă aceasta InterBase permite, dacă ceva sa întâmplat, de a anula tranzacția pe toate serverele implicate.
InterBase este implementat utilizând ANSI SQL-92. Această interfață standard reduce considerabil timpul de adoptare la InterBase a elaboratorilor noi. El se utilizează la implementarea procedurilor stocate, trigherelor, restricțiilor și declarațiilor de integritate a datelor.
În InterBase se poate de folosit UNICODE la păstrarea datelor. Această posibilitate permite păstrarea informațiilor în mai multe limbi în același tabel.
InterBase este disponibil pe o listă mare de platforme UNIX și Windows.
Specificațiile tehnice a SGBD InterBase
Dimensiunile Bazei de Date, utilizând fișiere multiple poate ajunge la Terabytes. Un fișier poate avea 2 GB. Celelalte restricții sunt prezentate în tabelul 3.
Restricțiile fizice a SGBD InterBase Tabelul 1.1.
Pentru sistemul informațional implementat utilizăm InterBase Server v. 5.1. pentru platforma Windows NT. Pentru lucrul minim, acest server necesită 64 Mb memorie operativă, de dorit însă să fie 128 Mb.
2. Descrierea instrucțiunilor ANSI SQL utilizate în SGDB InterBase.
2.1. CREATE DOMAIN
Creează un tip de date pentru coloane global în toată baza de date.
Sintaxa:
CREATE DOMAIN domain [AS] <datatype>
[DEFAULT { literal | NULL | USER}]
[NOT NULL] [CHECK ( <dom_search_condition>)]
[COLLATE collation];
< datatype> = {
{SMALLINT | INTEGER | FLOAT | DOUBLE PRECISION} [ <array_dim>]
| {DECIMAL | NUMERIC} [( precision [, scale])] [ <array_dim>]
| DATE [ <array_dim>]
| {CHAR | CHARACTER | CHARACTER VARYING | VARCHAR}
[(1…32767)] [ <array_dim>] [CHARACTER SET charname]
| {NCHAR | NATIONAL CHARACTER | NATIONAL CHAR}
[VARYING] [(1…32767)] [ <array_dim>]
| BLOB [SUB_TYPE { int | subtype_name}] [SEGMENT SIZE int]
[CHARACTER SET charname]
| BLOB [( seglen [, subtype])]
}
<array_dim> = [[x:]y [, [x:]y …]]
<dom_search_condition> = {
VALUE <operator> <val>
| VALUE [NOT] BETWEEN <val> AND <val>
| VALUE [NOT] LIKE <val> [ESCAPE <val>]
| VALUE [NOT] IN ( <val> [ , <val> …])
| VALUE IS [NOT] NULL
| VALUE [NOT] CONTAINING <val>
| VALUE [NOT] STARTING [WITH] <val>
| ( <dom_search_condition>)
| NOT <dom_search_condition>
| <dom_search_condition> OR <dom_search_condition>
| <dom_search_condition> AND <dom_search_condition>
}
< operator> = {= | < | > | <= | >= | !< | !> | <> | !=}
Note referitor la sintaxa structurii CREATE DOMAIN:
Nu este posibil de a specifica clauza COLLATE pentru coloanele de tip Blob.
Pentru declararea masivelor trebuie utilizate parantezele pătrate. De exemplu următoarea segvență creează un masiv 5×5 de elemente tip string cu lungime maximă de 6 caractere:
my_array = varchar(6)[5,5]
Utilizați : pentru definirea masivelor numerotarea la care se începe diferit de 1. Următorul exemplu creează un masiv de numere întregi care se începe la 10 și se sfârșește la 20:
my_array = integer[20:30]
În structurile SQL transmise către DSQL omiteți simbolul ; după declararea tipului, în aplicații cu SQL inclus ca exemplu C, C++ și în isql se utilizează simbolul ; ca semn de sfârșit al instrucțiunii.
Descrierea operatorilor utilizați. Tabelul 2.1.
CREATE DOMAIN creează un tip de date pentru coloanele definite cu CREATE TABLE sau ALER TABLE. Definirea tipului de date (domeniului) conține un set de caractere, care includ:
Tipul de date;
Opțional: valoarea vidă;
Opțional: interzicerea valorilor vide;
Opțional: restricții la date;
Opțional: o clauză collation.
Notă: Aveți grijă la crearea domeniilor cu restricții contradictorii, așa ca declararea domeniului NOT NULL și atribuirea valorii implicite DEFAULT NULL.
Coloanele care sunt create în baza domeniilor moștenesc toate caracteristicile domeniului. Valoarea implicită a domeniului, clauza collation, și NOT NULL pot fi rescrise când definim o coloană în baza unui domeniu. O coloană bazată pe un domeniu poate adăuga restricții suplimentare la clauza CHECK.
Exemple:
Următorul isql exemplu creează un domeniu numeric care trebuie să posede o valoare pozitivă mai mare decât 1000 cu valoarea implicită de 9999. Cuvântul cheie VALUE substituie numele coloanei care se va baza pe acest domeniu.
CREATE DOMAIN CUSTNO
AS INTEGER
DEFAULT 9999
CHECK (VALUE > 1000);
În următorul isql exemplu valorile introduse în domeniu la 4 valori specifice:
CREATE DOMAIN PRODTYPE
AS VARCHAR(12)
CHECK (VALUE IN (’software’, ’hardware’, ’other’, ’N/A’));
În următorul isql exemplu, prima instrucțiune creează un domeniu utilizând USER pentru valoarea implicită. Următoarele instrucțiuni creează un tabel care include o coloană, ENTERED_BY, creată în baza domeniului USERNAME.
CREATE DOMAIN USERNAME AS VARCHAR(20)
DEFAULT USER;
CREATE TABLE ORDERS (ORDER_DATE DATE, ENTERED_BY USERNAME, ORDER_AMT
DECIMAL(8,2));
INSERT INTO ORDERS (ORDER_DATE, ORDER_AMT)
VALUES (’1-MAY-93’, 512.36);
Instrucțiunea INSERT nu include o valoare pentru coloana ENTERED_BY, de aceia InterBase automat va introduce denumirea utilizatorului a utilizatorului curent, JSMITH:
SELECT * FROM ORDERS;
1-MAY-93 JSMITH 512.36
2.2. CREATE TABLE
Se utilizează pentru a crea un tabel nou într-o bază de date existentă.
Sintaxa:
CREATE TABLE table [EXTERNAL [FILE] ’ <filespec>’]
( <col_def> [, <col_def> | <tconstraint> …]);
<col_def> = col {< datatype> | COMPUTED [BY] (< expr>) | domain}
[DEFAULT { literal | NULL | USER}]
[NOT NULL]
[ <col_constraint>]
[COLLATE collation]
< datatype> = {
{SMALLINT | INTEGER | FLOAT | DOUBLE PRECISION} [ <array_dim>]
| {DECIMAL | NUMERIC} [( precision [, scale])] [ <array_dim>]
| DATE [ <array_dim>]
| {CHAR | CHARACTER | CHARACTER VARYING | VARCHAR}
[( int)] [ <array_dim>] [CHARACTER SET charname]
| {NCHAR | NATIONAL CHARACTER | NATIONAL CHAR}
[VARYING] [( int)] [ <array_dim>]
| BLOB [SUB_TYPE { int | subtype_name}] [SEGMENT SIZE int]
[CHARACTER SET charname]
| BLOB [( seglen [, subtype])]
}
<array_dim> = [[x:]y [, [x:]y …]]
< expr> = O expresie SQL care întoarce o valoare.
<col_constraint> = [CONSTRAINT constraint] <constraint_def>
<constraint_def> = {UNIQUE | PRIMARY KEY
| CHECK ( <search_condition>)
| REFERENCES other_table [( other_col [, other_col …])]}
[ON DELETE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]
[ON UPDATE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]
<tconstraint> = CONSTRAINT constraint <tconstraint_def>
<tconstraint_def> = {{PRIMARY KEY | UNIQUE} ( col [, col …])
| FOREIGN KEY ( col [, col …]) REFERENCES other_table
[ON DELETE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]
[ON UPDATE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]
| CHECK ( <search_condition>)}
<search_condition> =
{ <val> <operator> { <val> | ( <select_one>)}
| <val> [NOT] BETWEEN <val> AND <val>
| <val> [NOT] LIKE <val> [ESCAPE <val>]
| <val> [NOT] IN ( <val> [ , <val> …] | <select_list>)
| <val> IS [NOT] NULL
| <val> {[NOT] {= | < | >} | >= | <=}
{ALL | SOME | ANY} ( <select_list>)
| EXISTS ( <select_expr>)| SINGULAR ( <select_expr>)
| <val> [NOT] CONTAINING <val>| <val> [NOT] STARTING [WITH] <val>
| ( <search_condition>)| NOT <search_condition>
| <search_condition> OR <search_condition>
| <search_condition> AND <search_condition>}
<val> = {
col [ <array_dim>] | : variable| <constant> | <expr> | <function>
| udf ([ <val> [, <val> …]])| NULL | USER | RDB$DB_KEY | ?
} [COLLATE collation]
<constant> = num | ' string' | charsetname ' string'
<function> = {
COUNT (* | [ALL] <val> | DISTINCT <val>)| SUM ([ALL] <val> | DISTINCT <val>)
| AVG ([ALL] <val> | DISTINCT <val>)| MAX ([ALL] <val> | DISTINCT <val>)
| MIN ([ALL] <val> | DISTINCT <val>)| CAST ( <val> AS <datatype>)
| UPPER ( <val>)| GEN_ID ( generator, <val>)
}
<operator> = {= | < | > | <= | >= | !< | !> | <> | !=}
<select_one> = SELECT numai la o coloană, întoarce exact o valoare.
<select_list> = SELECT numai la o coloană, întoarce zero sau mai multe valori.
<select_expr> = SELECT numai la o coloană, întoarce zero sau mai multe valori.
Descrierea operatorilor utilizați. Tabelul 2.2.
Continuarea tabelului 2.2.
CREATE TABLE implementează în o bază de date existentă un nou tabel, coloanele lui și restricțiile pentru integritate. Utilizatorul care creează tabelul este proprietarul tabelului și posedă toate privilegiile pentru el, incluzând posibilitatea de a extinde aceste privilegii și pentru alți utilizatori, trighere, proceduri ai BD utilizând clauza GRANT.
CREATE TABLE posedă următoarele opțiuni pentru definirea coloanelor:
Coloanele locale specifică numele și tipul de date pentru informația ce va fi introdusă în coloană.
Coloanele calculate (Computed by) sunt bazate pe o expresie. Valorile coloanei sunt calculate de fiecare dată când tabelul este accesat. Dacă tipul de date nu este specificat InterBase evaluează unul corespunzător. Coloanele la care există referințe în expresii trebuie să existe înainte ca coloanele să fie definite.
Coloanele în baza domeniilor moștenesc toate proprietățile domeniului, cu posibilitatea de a introduce unele modificări (vezi descriere pentru CREATE DOMAIN).
Tipurile de date CHAR, VARCHAR, sau Blob pentru coloanele textuale pot include clauza CHARACTER SET pentru specificarea unui set particular pentru o singură coloană. Dacă nu specificăm setul de caractere coloane va utiliza setul implicit de caractere. Dacă setul de caractere al bazei de date este schimbat, toate coloanele create apoi vor utiliza acest set ca setul implicit, însă coloanele deja create vor păstra setul de caractere la momentul creării.
NOT NULL este un atribut care previne introducerea valorilor vide sau necunoscute în coloană. NOT NULL afectează operațiunile INSERT și UPDATE.
Instrucțiunea DECLARE TABLE trebuie să preceadă CREATE TABLE în aplicațiile SQL incluse dacă același program creează tabelul și introduce date în el.
Opțiunea EXTERNAL FILE creează un tabel datele căruia se află într-un fișier extern, diferit de baza de date InterBase. Utilizați această opțiune pentru:
A defini un tabel InterBase compus din datele unei surse externe, așa ca datele în fișiere gestionate de către alte sisteme de operare ori de către aplicații non-SGBD.
Transferarea datelor într-un tabel existent al InterBase dintr-un fișier extern.
Restricțiile de integritate a datelor.
Se pot defini restricții de integritate la momentul creării tabelului. Aceste restricții sunt reguli pentru validarea datelor prin introducerea relațiilor coloană – tabel și tabel – tabel. Ele verifică toate tranzacțiile care accesează baza de date și sunt automat susținute de către sistem. CREATE TABLE permite crearea următoarelor restricții de integritate:
PRIMARY KEY (cheia principală) prezintă una sau mai multe coloane, conținutul cărora colectiv este garantat că va fi unic. Coloanele care aparțin la PRIMARY KEY trebuie să nu fie vide, adică să posede atributul NOTT NULL. Un tabel poate avea doar o cheie primară PRIMARY KEY.
Cheia UNIQUE (unică) asigură că într-o coloană sau un set de coloane nu vor exista 2 tuple cu valori egale. O coloană unică de asemenea trebuie să specifice atributul NOT NULL. Un tabel poate avea una sau mai multe chei unice. O cheie unică poate fi referită de către FOREIGN KEY în alt tabel.
Restricțiile de referință (REFERENCES) asigură că valorile în coloanele specificate (cunoscute ca FOREIGN KEY (cheie străină)) sunt aceleași valori în cheia pe care se fac referințe (fie PRIMARY sau UNIQUE) în alt tabel. Cheile PRIMARY sau UNIQUE trebuie să fie definite înainte ca să fie definită restricția REFERENCES la alt tabel. Opțiunile ON DELETE și ON UPDATE la REFERENSES descriu acțiunea asupra cheii străine când cheia primară este ștearsă sau modificată. Valorile posibile pentru ON DELETE și ON UPDATE sunt următoarele:
Descrierea operatorilor utilizați. Tabelul 2.3.
Este posibil de a crea referințe FOREIGN KEY pentru tabele create de către alți utilizatori, dacă ei au creat acces de tip REFERENCES la tabelele corespunzătoare. Orice utilizator care modifică cheia străină trebuie să posede privilegiile REFERENCES sau SELECT asupra cheii primare a tabelului.
Condiția CHECK asigură o verificare pentru date la introducere și modificare la tabelul specificat. Search_condition poate necesita o combinație de valori ori poate compara valoarea introdusă cu datele din alte coloane.
Specificația USER ca valoare pentru Search_condition specifică numele login al utilizatorului care încearcă să scrie în tabelul dat.
Crearea cheilor PRIMARY KEY și FOREIGN KEY necesită acces exclusiv la baza de date.
Pentru restricții care nu posedă nume, sistemul generează un nume unic pe care îl păstrează în tabelul de sistem RDB$RELATION_CONSTRAINTS.
Exemple:
Următoarea isql structură creează un tabel simplu cu o cheie primară:
CREATE TABLE COUNTRY
(
COUNTRY COUNTRYNAME NOT NULL PRIMARY KEY,
CURRENCY VARCHAR(10) NOT NULL
);
Următorul set de instrucțiuni creează restricții UNIQUE la nivel de coloană și la nivel de tabel.
CREATE TABLE STOCK
(MODEL SMALLINT NOT NULL UNIQUE,
MODELNAME CHAR(10) NOT NULL,
ITEMID INTEGER NOT NULL,
CONSTRAINT MOD_UNIQUE UNIQUE (MODELNAME, ITEMID));
Următorul exemplu în isql reflectă instrucțiunile PRIMARY KEY, FOREIGN KEY de nivel de tabel și restricția CHECK. Restricția PRIMARY KEY se bazează pe trei coloane, de asemenea acest exemplu ilustrează crearea unui masiv de VARCHAR (string de lungime variabilă).
CREATE TABLE JOB
(
JOB_CODE JOBCODE NOT NULL,
JOB_GRADE JOBGRADE NOT NULL,
JOB_COUNTRY COUNTRYNAME NOT NULL,
JOB_TITLE VARCHAR(25) NOT NULL,
MIN_SALARY SALARY NOT NULL,
MAX_SALARY SALARY NOT NULL,
JOB_REQUIREMENT BLOB(400,1),
LANGUAGE_REQ VARCHAR(15) [5],
PRIMARY KEY (JOB_CODE, JOB_GRADE, JOB_COUNTRY),
FOREIGN KEY (JOB_COUNTRY) REFERENCES COUNTRY (COUNTRY),
CHECK (MIN_SALARY < MAX_SALARY) );
În următorul exemplu coloana F2 este o cheie străină care posedă referință la cheia primară P1 a tabelului T1. Când se modifică un tuplu în T1 schimbările automat se propagă la toate tuplele afectate în T2. Dacă un tuplu în T1 este șters, toate tuplele afectate în F2 a tabelei T2 vor fi setate la NULL.
CREATE TABLE T1 (P1 INTEGER NOT NULL PRIMARY KEY);
CREATE TABLE T2 (F2 INTEGER FOREIGN KEY REFERENCES T1.P1
ON UPDATE CASCADE
ON DELETE SET NULL);
Următorul exemplu prezintă un tabel în care valoarea unei coloane este calculată:
CREATE TABLE SALARY_HISTORY
( EMP_NO EMPNO NOT NULL,
CHANGE_DATE DATE DEFAULT ’NOW’ NOT NULL,
UPDATER_ID VARCHAR(20) NOT NULL,
OLD_SALARY SALARY NOT NULL,
PERCENT_CHANGE DOUBLE PRECISION
DEFAULT 0
NOT NULL
CHECK (PERCENT_CHANGE BETWEEN -50 AND 50),
NEW_SALARY COMPUTED BY
(OLD_SALARY + OLD_SALARY * PERCENT_CHANGE / 100),
PRIMARY KEY (EMP_NO, CHANGE_DATE, UPDATER_ID),
FOREIGN KEY (EMP_NO) REFERENCES EMPLOYEE (EMP_NO)
);
În următorul isql exemplu prima coloană menține ordinea collate implicită pentru setul de caractere implicit al bazei de date. A doua coloană posedă a ordine diferită collate și a treia coloană include un alt set de caractere și o alt ordine collate:
CREATE TABLE BOOKADVANCE (BOOKNO CHAR(6),
TITLE CHAR(50) COLLATE ISO8859_1,
EUROPUB CHAR(50) CHARACTER SET ISO8859_1 COLLATE FR_FR);
2.3. CREATE TRIGGER
Această instrucțiunea creează un trigher, incluzând definirea mecanismului de activare, și a acțiunilor efectuate de către el. Disponibil în DSQL și isql.
Sintaxa:
CREATE TRIGGER name FOR table
[ACTIVE | INACTIVE]
{BEFORE | AFTER}
{DELETE | INSERT | UPDATE}
[POSITION number]
AS <trigger_body> terminator
<trigger_body> = [ <variable_declaration_list>] < block>
<variable_declaration_list> =
DECLARE VARIABLE variable <datatype>;
[DECLARE VARIABLE variable <datatype>; …]
< block> =
BEGIN
<compound_statement>
[ <compound_statement> …]
END
<compound_statement> = { <block> | statement;}
<datatype> = {
{SMALLINT | INTEGER | FLOAT | DOUBLE PRECISION}
| {DECIMAL | NUMERIC} [( precision [, scale])]
| DATE | {CHAR | CHARACTER | CHARACTER VARYING | VARCHAR}
[( int)] [CHARACTER SET charname]
| {NCHAR | NATIONAL CHARACTER | NATIONAL CHAR}
[VARYING] [( int)]}
Descrierea operatorilor utilizați. Tabelul 2.4.
CREATE TRIGGER definește un trigher nou pentru baza de date. Trigher se numește un program asociat cu o tabelă sau view care se execută automat când un tuplu în tabel sau view este modificat, șters sau introdus.
Un trigher nu se apelează niciodată direct. Când a aplicație sau utilizatorul încearcă se efectueze una din operațiile INSERT, UPDATE, sau DELETE asupra unui tuplu din tabel, trigherele asociate cu acest tabel și cu această operație sunt executate imediat. Trigherele definite pentru UPDATE în view fără posibilități de modificare se execută chiar când nu se execută modificări.
Trigherele sunt compuse din cap (header) și corp (body).
Capul trigherului conține:
Numele trigherului, unic în baza de date, care distinge acest trigher de la alte trighere.
Numele tabelului, care identifică tabelul cu care va fi asociat acest trigher.
Instrucțiunile care determină când trigherul va fi activat.
Corpul trigherului conține:
O listă opțională de variabile locale și tipul lor de date.
Un bloc de instrucțiuni implementate in limbajul de proceduri și trighere al InterBase, cuprinse de către BEGIN și END. Aceste instrucțiuni vor fi executate la activarea trigherului. Un bloc de instrucțiuni poate la rândul lui include alte blocuri, asigurând în așa mod mai multe nivele logice pentru programare (nesting).
Deoarece fiecare instrucțiune din corpul trigherului trebuie să se sfârșească ci simbolul ; trebuie de a defini un alt simbol pentru a specifica sfârșitul corpului trigherului. În isql, includeți instrucțiunea SET TERM înainte CREATE TRIGGER pentru a specifica un terminator altul decât ;. După corpul trigherului, includeți alt SET TERM pentru a schimba terminatorul înapoi la simbolul ;.
Trigherul este asociat cu un tabel. Proprietarul tabelului și utilizatorii la care li sau acordat privilegii referitor la tabel automat primesc drepturile de a acționa trigherele asociate.
Trigherilor li se pot acorda privilegii asupra tabelelor la fel ca și la alte proceduri. Utilizați instrucțiunea GRAND, dar în loc de a utiliză TO username folosiți, TO TRIGGER trigger_name. Privilegiile trigherilor pot fi extrase similar utilizând instrucțiunea REVOKE.
Când utilizatorul efectuează acțiunea care lansează trigherul spre executare, trigherul va avea privilegiile în caz când măcar una din următoarele condiții este adevărată:
Trigherul are privilegiile pentru acționare;
Utilizatorul are privilegiile pentru a acționa.
Limbajul pentru proceduri și trighere al InterBase este un limbaj de programare complet pentru proceduri (stored procedures) și trighere (trigger). El include:
SQL instrucțiuni de manipulare cu datele (SQL DML) : INSERT, UPDATE, DELETE și instrucțiunea SELECT.
SQL operatorii și expresiile, incluzând UDF legate cu executarea aplicațiilor și generatorilor.
Extensii puternice pentru SQL, incluzând instrucțiuni de atribuire, de control a fluxelor, variabile de context, instrucțiuni de generare a evenimentelor, excepții și structuri de prelucrare a erorilor. Următorul tabel sumează extensiile limbajului pentru trighere.
Descrierea operatorilor utilizați. Tabelul 2.5.
Continuarea tabelului 2.5.
Exemple:
Următorul trigher, SAVE_SALARY_CHANGE, face modificări corespunzătoare la tabelul SALARY_HISTORY când este efectuată modificarea salariului lucrătorului în tabelul lucrătorilor EMPLOYEE:
SET TERM !! ;
CREATE TRIGGER SAVE_SALARY_CHANGE FOR EMPLOYEE
AFTER UPDATE AS
BEGIN
IF (OLD.SALARY <> NEW.SALARY) THEN
INSERT INTO SALARY_HISTORY
(EMP_NO, CHANGE_DATE, UPDATER_ID, OLD_SALARY, PERCENT_CHANGE)
VALUES (OLD.EMP_NO, ’now’, USER,OLD.SALARY,
(NEW.SALARY – OLD.SALARY) * 100 / OLD.SALARY);
END !!
SET TERM ; !!
Următorul trigher, SET_CUST_NO, utilizează un generator pentru a crea numere unice pentru clienți când un nou client este introdus în tabela pentru clienți CUSTOMER:
SET TERM !! ;
CREATE TRIGGER SET_CUST_NO FOR CUSTOMER
BEFORE INSERT AS
BEGIN
NEW.CUST_NO = GEN_ID(CUST_NO_GEN, 1);
END !!
SET TERM ; !!
Următorul trigher, POST_NEW_ORDER, generează un eveniment “new_order” de fiecare dată când un nou tuplu este introdus în tabelul SALES:
SET TERM !! ;
CREATE TRIGGER POST_NEW_ORDER FOR SALES
AFTER INSERT AS
BEGIN
POST_EVENT ’new_order’;
END !!
SET TERM ; !!
Următoarele patru fragmente demonstrează de cap de trighere demonstrează cum opțiunea POSITION determină ordinea de lansare a trigherilor.
CREATE TRIGGER A FOR accounts
BEFORE UPDATE
POSITION 5 … /* Corpul trigherului urmează */
CREATE TRIGGER B FOR accounts
BEFORE UPDATE
POSITION 0 … /* Corpul trigherului urmează */
CREATE TRIGGER C FOR accounts
AFTER UPDATE
POSITION 5 … /* Corpul trigherului urmează */
CREATE TRIGGER D FOR accounts
AFTER UPDATE
POSITION 3 … /*Corpul trigherului urmează*/
Când această modificare are loc:
UPDATE accounts SET account_status = 'on_hold'
WHERE account_balance <0;
Ordinea de lansare a trigherilor este:
Trigherul B este lansat.
Trigherul A este lansat.
Este efectuată operația de UPDATE.
Trigherul D este lansat.
Trigherul C este lansat.
2.4. GRANT
Specifică privilegiile pentru utilizatori pentru obiectele bazei de date. Disponibil în SQL, DSQL, și isql.
Sintaxa:
GRANT{
< privileges> ON [TABLE] { tablename | viewname}
TO { <object> | <userlist> | GROUP UNIX_group}
| EXECUTE ON PROCEDURE procname TO { <object> | <userlist>}
| < role_granted> TO {PUBLIC | < role_grantee_list>}};
< privileges> = {ALL [PRIVILEGES] | < privilege_list>}
< privilege_list> = {
SELECT| DELETE| INSERT| UPDATE [( col [, col …])]
| REFERENCES [( col [, col …])]
[, < privilege_list> …]}}
<object> = {
PROCEDURE procname| TRIGGER trigname| VIEW viewname| PUBLIC
[, <object> …]}
<userlist> = {
[USER] username| rolename| Unix_user}[, <userlist> …]
[WITH GRANT OPTION]
< role_granted> = rolename [, rolename …]
< role_grantee_list> = [USER] username [, [USER] username …]
[WITH ADMIN OPTION]
Descrierea operatorilor utilizați. Tabelul 2.6.
Continuarea tabelului 2.6.
GRANT oferă privilegii și roluri pentru obiectele bazei de date utilizatorilor, rolurilor și altor obiect a bazei de date. Când un obiect este creat, doar utilizatorul ce la creat posedă toate privilegiile asupra obiectului și doar creatorul poare oferi aceste privilegii altor utilizatori sau obiecte a bazei de date.
Pentru a accesa un tabel sau view, utilizatorul sau obiectul trebuie să posede privilegiile asupra instrucțiunilor apropriate SELECT, INSERT, UPDATE, DELETE sau REFERENCES pentru acest tabel sau view. Privilegiile SELECT, INSERT, UPDATE, DELETE sau REFERENCES pot fi atribuite împreună utilizând clauza ALL.
Pentru a lansa la executare o procedură într-o aplicație, utilizatorul sau obiectul trebuie să posede privilegiul EXECUTE.
Pentru a oferi privilegii unui grup de utilizatori, creați un rol utilizând instrucțiunea CREATE ROLE. Apoi utilizați instrucțiunea GRANT privilege TO rolename pentru a oferi privilegiile dorite acestui rol și utilizați GRANT rolename TO user pentru a înscrie un utilizator la acest rol. Utilizatorii pot fi adăugași sau extrași din rol (grup) unul după altul utilizând instrucțiunile GRANT și REVOKE. Utilizatorul trebuie să specifice rolul la momentul conectării pentru a primi privilegiile de la rol.
Pentru sisteme de operare UNIX, privilegiile pot fi oferite unei grupe de utilizatori definite în /etc/groups, la orice UNIX utilizator definit în /etc/passwd, atât la server cât și la client, așa ca și la utilizatori individuali și roluri.
Pentru a permite altui utilizator să efectueze referințe la o coloană printr-o cheie străină, acordați dreptul REFERENCES la cheia primară a tabelei, ori la coloanele cheii primare, proprietarului cheii străine. De asemenea e necesar de a acorda REFERENCES și SELECT privilegii asupra cheii primare pentru orice utilizator care dorește să înscrie în tabelul ce conține cheia străină.
Dacă acordați privilegiul REFERENCES, el trebuie să fie oferit minim pe toate coloanele cheii primare. Dacă REFERENCES este oferit pentru tabelul întreg, coloanele care nu fac parte din cheia primară nu sunt afectate deloc.
Când utilizatorul definește cheia străină pentru un tabel creat de alt utilizator, InterBase verifică dacă sunt oferite privilegiile REFERENCES la tabelul la care se vor efectua referințele.
Privilegiile sunt utilizate în momentul executării pentru verificarea dacă valoarea introdusă în cheia străină se conține în cheia primară a tabelului.
Este posibil de a oferi privilegii REFERENCES la roluri.
Pentru a permite utilizatorilor de a oferi privilegii la alți utilizatori, folosiți <userlist> care include clauza WITH GRANT OPTION. Utilizatorii pot transmite altor utilizatori numai privilegiile pe care ei le posedă.
Pentru a oferi privilegiile la toți utilizatorii specificați PUBLIC în locul listei cu denumirile utilizatorilor. Specificația PUBLIC oferă privilegiile numai la utilizatori, nu și la obiectele bazei de date.
Următorul tabel sumează privilegiile posibile:
Descrierea privilegiilor. Tabelul 2.7.
Privilegiile pot fi extrase numai de către utilizatorul care le-a transmis, utilizând instrucțiunea REVOKE. Dacă privilegiul ALL a fost oferit, atunci privilegiul ALL trebuie extras. Dacă privilegiile sunt oferite la PUBLIC, atunci ele trebuie extrase de la PUBLIC.
Exemple:
Următorul exemplu în isql oferă privilegiile SELECT și DELETE unui utilizator. Clauza WITH GRANT OPTION transferă utilizatorului dreptul GRANT asupra acestor privilegii:
GRANT SELECT, DELETE ON COUNTRY TO CHLOE WITH GRANT OPTION;
Următorul exemplu de SQL inclus oferă privilegiile SELECT și UPDATE la o procedură pentru un tabel:
EXEC SQL
GRANT SELECT, UPDATE ON JOB TO PROCEDURE GET_EMP_PROJ;
Următorul SQL inclus oferă EXECUTE privilegii pentru o procedură, altei proceduri și altui utilizator:
EXEC SQL
GRANT EXECUTE ON PROCEDURE GET_EMP_PROJ
TO PROCEDURE ADD_EMP_PROJ, LUIS;
Următorul exemplu creează un rol denumit “administrator”, oferă privilegiile UPDATE pentru tabelul1 acestui rol, și apoi oferă rolul la user1, user2 și user3. Acestor utilizatori apoi li se oferă UPDATE și REFERNCES privilegii pentru tabelul 1.
CREATE ROLE administrator;
GRANT UPDATE ON table1 TO administrator;
GRANT administrator TO user1, user2, user3;
2.5. REVOKE
Retrage privilegiile de la utilizatori pentru obiectele bazei de date specificate. Disponibil în SQL, DSQL și isql.
Sintaxa:
REVOKE [GRANT OPTION FOR]
< privileges> ON [TABLE] { tablename | viewname}
FROM { <object> | <userlist> | < rolelist> | GROUP UNIX_group}
| EXECUTE ON PROCEDURE procname
FROM { <object> | <userlist>}
| < role_granted> FROM {PUBLIC | < role_grantee_list>}};
< privileges> = {ALL [PRIVILEGES] | < privilege_list>}
< privilege_list> = {
SELECT| DELETE| INSERT| UPDATE [( col [, col …])]
| REFERENCES [( col [, col …])]
[, < privilege_list> …]}}
<object> ={
PROCEDURE procname| TRIGGER trigname| VIEW viewname| PUBLIC
[, <object>]}
<userlist> = [USER] username [, [USER] username …]
< rolelist> = rolename [, rolename]
< role_granted> = rolename [, rolename …]
< role_grantee_list> = [USER] username [, [USER] username …]
Descrierea operatorilor utilizați. Tabelul 2.8.
REVOKE retrage privilegiile de la utilizatori ori alte obiecte a bazei de date. Privilegii sunt operațiile pentru care utilizatorul posedă autoritate de efectuare.
GRANT OPTION FOR retrage drepturile utilizatorilor de a transmite privilegiile altor utilizatori.
Următoarele limitări trebuie să fie evidențiate pentru REVOKE.
Numai utilizatorul care oferă privilegiile le poate retrage.
Unui singur utilizator i se pot atribui aceleași privilegii pentru un obiect al bazei de date de către mai mulți utilizatori. Instrucțiunea REVOKE efectuată de către unul din acești utilizatori va retrage numai privilegiile oferite anterior de către acest utilizator particular.
Când un rol este retras de la un utilizator, toate privilegiile care au fost oferite de către acest utilizator altor utilizatori din cauza autorității oferite de rol, de asemenea vor fi extrase.
Exemple:
Următorul isql select retrage privilegiul SELECT de la un utilizator:
REVOKE SELECT ON COUNTRY FROM MIREILLE;
Următoarea instrucțiune în isql retrage privilegiul EXECUTE pentru o procedură de la altă procedură:
REVOKE EXECUTE ON PROCEDURE GET_EMP_PROJ
FROM PROCEDURE ADD_EMP_PROJ, LUIS;
2.6. CREATE GENERATOR
Declară un generator pentru baza de date. Disponibil în SQL, DSQL și isql.
Sintaxa
CREATE GENERATOR name;
unde name – numele generatorului.
CREATE GENERATOR declară un generator în baza de date setează valoarea inițială la zero. Generator numim un număr în serie (segvență) care poate fi automat introdus în o coloană utilizând funcția GEN_ID(). Generatoarele des sunt utilizate pentru asigurarea unei valori unice în cheile primare.
O bază de date poate conține orice număr de generatoare. Generatoarele sunt globale pentru baza de date și pot fi utilizate și modificate în orice tranzacție. InterBase nu atribuie valori duble pentru tranzactele paralele.
Utilizați SET GENERATOR pentru a seta sau modifica valorile generatorului existent. Generatorul poate fi utilizat în interiorul unei proceduri, trigher, ori instrucțiunii SQL care apelează GEN_ID().
Nu există instrucțiune “drop generator”. Pentru a șterge un generator, el trebuie șters din tabelul de sistem în următorul mod:
DELETE FROM RDB$GENERATORS WHERE RDB$GENERATOR_NAME = EMPNO_GEN’;
Exemple: Următorul exemplu în isql() creează un generator EMPNO_GEN, și trigherul CREATE_EMPNO. Trigherul utilizează generatorul pentru a produce chei numerice, incrementate cu 1, pentru coloane NEW.EMPNO:
CREATE GENERATOR EMPNO_GEN;
COMMIT;
SET TERM !! ;
CREATE TRIGGER CREATE_EMPNO FOR EMPLOYEES
BEFORE INSERT
POSITION 0
AS BEGIN
NEW.EMPNO = GEN_ID(EMPNO_GEN, 1);
END
SET TERM ; !!
2.7. CREATE INDEX
Creează un index în una sau mai multe coloane a bazei de date. Disponibil în SQL, DSQL și isql.
Sintaxa:
CREATE [UNIQUE] [ASC[ENDING] | DESC[ENDING]]
INDEX index ON table ( col [, col …]);
Descrierea operatorilor utilizați. Tabelul 2.9.
Se implementează un index în una sau mai multe coloane a tabelului. Utilizați CREATE INDEX pentru a mări viteza de acces la date. Utilizând un index pentru coloane care apar în WHERE clauze poate îmbunătăți performanțele căutării.
Nu este posibil crearea indexurilor pentru coloanele de tip Blob sau masive.
Un index UNIQUE nu poate fi creat în o coloană, sau un set de coloane dacă ele deja conțin valori duble, ori valori vide (NULL).
ASC și DESC specifică ordinea în care sunt sortate indexurile. Pentru răspunsuri mai rapide în cereri care necesită valori sortate, creați ordinea în indexuri ca ele să coincidă cu cererea ORDER BY. Pot fi create două indexuri cu ASC și DESC pe aceleași coloane pentru a accesa datele în diferite cereri cu diferite sortări.
Pentru a îmbunătăți performanțele indexurilor, utilizați SET STATISTICS pentru a recalcula selectivitatea indexurilor, ori reconstruiți indexul prin deactivarea lui și apoi activarea lui, utilizând instrucțiunea ALTER INDEX [1].
Exemple
Următoarea isql instrucțiune creează un index unic:
CREATE UNIQUE INDEX PRODTYPEX ON PROJECT (PRODUCT, PROJ_NAME);
Următoarea isql instrucțiune creează un index descrescător:
CREATE DESCENDING INDEX CHANGEX ON SALARY_HISTORY (CHANGE_DATE);
Următoarea isql instrucțiune creează un index bazat pe două coloane:
CREATE INDEX NAMEX ON EMPLOYEE (LAST_NAME, FIRST_NAME);
2.8. INSERT
Insert înscrie unul sau mai multe tuple de date într-un tabel sau view existent. Insert este una din privilegiile bazei de date controlate de către comenzile GRANT și REVOKE.
Valorile sunt înscrise în tuplu în ordinea coloanelor din tabelă, doar dacă nu este indicată o listă de coloane vizate. Dacă lista de coloane vizate prezintă un subset al coloanelor disponibile, valorile nule sau implicite automat sunt înscrise în toate coloanele nevizate.
Dacă lista opțională a coloanelor vizate este omisă, clauza VALUES trebuie să asigure valori pentru introducerea în toate coloanele tabelei.
Pentru a introduce un singur tuplu de date, clauza VALUES trebuie să asigure o listă specifică de valori pentru insertare.
Pentru a introduce mai multe tuple de date, trebuie să fie specificată o select expresie care extrage datele dintr-o tabelă pentru a le introduce în tabela aceasta. Coloanele selectate trebuie să corespundă cu coloanele vizate pentru introducere.
Este permis de a alege câmpuri de date din același tabel în care dorim să efectuăm introducerea, dar așa practică nu se recomandă deoarece poate cauza in introducerea infinită de tuple.
Clauza TRANSACTION poate fi utilizată în SQL aplicații cu tranzacte multiple pentru specificarea care tranzact dirijează operația de INSERT. Clauza TRANSACTION nu este disponibilă în DSQL sau isql.
Sintaxa:
INSERT [TRANSACTION transaction] INTO <object> [( col [, col …])
{VALUES ( <val> [, <val> …]) | <select_expr>};
unde:
<object> = tablename | viewname
<val> = {
: variable | <constant> | <expr>
| <function> | udf ([ <val> [, <val> …]])| NULL | USER | RDB$DB_KEY | ?
} [COLLATE collation]
<constant> = num | ' string' | charsetname ' string'
<expr> = O SQL expresie care întoarce o valoare validă pentru insertare.
<function> = {
CAST ( <val> AS <datatype>)| UPPER ( <val>)| GEN_ID ( generator, <val>)
}
<select_expr> = O structură SELECT care întoarce 0 sau mai multe tuple și unde numărul de coloane în fiecare tuplu este egal cu numărul de obiecte care trebuie să fie introduse.
Exemple.
Următoarea segvență de SQL inclus într-o aplicație adaugă un tuplu la un tabel, atribuind valori de la variabile la două coloane:
EXEC SQL
INSERT INTO EMPLOYEE_PROJECT (EMP_NO, PROJ_ID) VALUES (:emp_no ,
:proj_id );
următoarea structură în isql specifică valorile de insertare într-un tabel prin clauza select:
INSERT INTO PROJECTS
SELECT * FROM NEW_PROJECTS
WHERE NEW_PROJECTS.START_DATE > ’6-JUN-1994’;
2.9. UPDATE
Modifică parțial sau în întregime tuplul existent de date dintr-un tabel sau view. Disponibil în SQL, DSQL și isql.
Sintaxa:
în SQL:
UPDATE [TRANSACTION transaction] { table | view}
SET col = < val> [, col = <val> …]
[WHERE <search_condition> | WHERE CURRENT OF cursor];
în DSQL și isql:
UPDATE { table | view}
SET col = < val> [, col = <val> …]
[WHERE <search_condition>
<val> = {
col [ <array_dim>] | : variable| <constant> | <expr> | <function>
| udf ([ <val> [, <val> …]])| NULL | USER | ?}
[COLLATE collation]
<array_dim> = [[x:]y [, [x:]y …]]
<constant> = num | ' string' | charsetname ' string'
<expr> = O expresie SQL corectă care întoarce o valoare.
<function> = {
CAST ( <val> AS <datatype>)| UPPER ( <val>)| GEN_ID ( generator, <val>)}
<search_condition> = Vezi CREATE TABLE pentru o descriere detailată.
Descrierea operatorilor utilizați. Tabelul 2.10.
UPDATE modifică unul sau mai multe tuple dintr-un tabel sau view existent. UPDATE este una din privilegiile SGBD controlate de către GRANT și REVOKE.
Clauza WHERE este utilizată pentru a restrânge tuplele din tabelă la un subset care va fi modificat. Fără clauza WHERE vor fi modificate toate tuplele din tabel.
Exemple:
Următoarea isql structură modifică toate tuplele din tabel:
UPDATE CITIES
SET POPULATION = POPULATION * 1.03;
Următorul exemplu de SQL inclus folosește o clauză WHERE pentru a reduce modificare tuplelor la un subset:
EXEC SQL
UPDATE PROJECT
SET PROJ_DESC = :blob_id
WHERE PROJ_ID = :proj_id;
2.10. ROLLBACK
Restabilește baza de date la starea precedentă începutului tranzacției. Disponibil în SQL, DSQL, și isql.
Sintaxa:
ROLLBACK [TRANSACTION name] [WORK] [RELEASE];
Descrierea operatorilor utilizați. Tabelul 2.11.
ROLLBACK “întoarce” modificările efectuate în baza de date de către tranzactul curent, apoi încheie tranzactul. Rupe legătura programului cu baza de date și eliberează resursele de sistem. Utilizați RELEASE în ultimul ROLLBACK pentru a închide toate bazele de date deschise. Așteptați până când programul nu mai are nevoie de baza de date pentru a elibera resursele de sistem.
Clauza TRANSACTION este utilizată pentru a specifica tranzactul “întors” într-o aplicație cu mai multe tranzacte deschise. Dacă este omis, tranzactul implicit este “întors”. Clauza TRANSACTION nu este disponibilă în DSQL.
Exemplu:
Următorul isql exemplu “întoarce” tranzactul implicit:
ROLLBACK;
2.11. SELECT
Pentru vizionarea informației din baze de date relaționale care susțin limbajul SQL trebuie de utilizat instrucțiunea SELECT. SELECT are o sintaxă foarte complicată, ceea ce ne dă, în schimb, posibilități enorme de obținere a datelor din tabele. Forma cea mai simplă a instrucțiunii SELECT este:
SELECT * FROM table_name;
Unde table_name este numele tabelului din care vom obține datele, iar asteriscul (*) înseamnă selectarea a tuturor câmpurilor din tabel.
Sintaxa instrucțiunii SELECT este următoarea:
SELECT [DISTINCT] columns
FROM tables
WHERE <search_conditions>
[GROUP BY column HAVING <search_condition>]
ORDER BY <sort_order>;
Descrierea clauzelor:
SELECT columns Lista câmpurilor ce vor fi selectate
DISTINCT Cuvânt-cheie opțional care elimină înscrierile duble
FROM tables Identifică tabelele care vor fi utilizate
WHERE <search_conditions> Specifică condiția de căutare care va fi utilizată pentru a limita numărul înscrierilor obținute la subset al numărului total de înscrieri valabile.
GROUP BY column Grupează înscrierile obținute în acord cu valoarea coloanei specificate.
HAVING <search_conditions> Specifică condiția de căutare care va fi utilizată împreună cu clauza GROUP BY.
ORDER BY <sort_order> Specifică ordinea de sortare a înscrierilor care vor fi întoarse de SELECT.
Ordinea clauzelor în instrucțiunea SELECT este importantă, însă numai SELECT și FROM sunt clauzele strict necesare.
SELECT poate, de asemenea, întoarce date din multiple tabele, setând lista numelor tabelelor în clauza FROM, separate prin virgulă.
Ca exemplu, să culegem următoarea instrucțiune SQL:
SELECT DEPARTMENT, DEPT_NO, FULL_NAME, EMP_NO
FROM DEPARTMENT, EMPLOYEE
WHERE DEPARTMENT = "Engineering" AND MNGR_NO = EMP_NO;
Această instrucțiune întoarce câmpurile specificate pentru salariatul care este managerul departamentului Engineering. Deseori numele câmpului se întâlnește în mai multe tabele din cadrul aceleiași cereri (query). În acest caz câmpurile trebuie să fie diferențiate, precedând fiecare nume a câmpului cu numele tabelului și punct (.).
WHERE
Clauza WHERE a instrucțiunii SELECT urmează după clauzele SELECT și FROM.
Dacă utilizăm clauza ORDER BY, atunci clauza WHERE trebuie folosită înaintea ei. Clauza WHERE testează datele după condiția dată, iar clauza SELECT întoarce numai înscrierile ce satisfac condiției respective. De exemplu, instrucțiunea:
SELECT LAST_NAME, FIRST_NAME, PHONE_EXT
FROM EMPLOYEE
WHERE LAST_NAME = "Green";
întoarce numai înscrierile pentru care LAST_NAME este “Green”.
WHERE condition;
În această clauză:
condition = column operator value [log_operator condition]
value = value arith_operator value
column –câmp din tabel
operator – operator de comparare (descris în tabelul de mai jos)
value – este o valoare sau un set de valori cu care se compară câmpul respectiv. Value poate fi compusă din două sau mai multe valori ca operanzi ai operatorilor aritmetici.
Condiția de căutare folosește următoarele tipuri de operatori:
Operator Descrierea
Operatori de comparare Se folosește pentru a compara data din câmpul respectiv cu valoarea din condiția de căutare. Exemple <, >, <=, >=, =, and <>. Alți operatori includ BETWEEN, CONTAINING, IN, IS NULL, LIKE, și STARTING WITH.
Operatori aritmetici Se folosesc pentru a calcula și evalua valorile condițiilor de căutare. Operatorii sunt +, -, *, și /.
Operatorii logici Se folosesc pentru a combina condițiile de căutare sau nega condiția. Operatorii logici: NOT, AND, și OR.
Condițiile de căutare pot folosi următoarele tipuri de valori:
Tipurile de valori Descrierea
Valori literale Numere și șiruri de caractere a căror valoare dorim să testăm (de exemplu, numărul 1138 sau the string-ul "Smith").
Valori derivate Funcții și expresii aritmetice, de exemplu: SALARY * 2 sau LAST_NAME || FIRST_NAME.
Subcereri O instrucțiune SELECT care întoarce una sau mai multe valori. Valorile întoarse se folosesc la testarea condiției de căutare.
Când înscrierea respectivă se compară la condiția de căutare, una din cele trei valori este întoarsă:
True: Înscrierea a satisfăcut condiției specificate în clauza WHERE.
False: Înscrierea nu a satisfăcut condiției specificate în clauza WHERE.
Unknown: Câmpul din clauza WHERE conține o valoare necunoscută care nu poate fi evaluată din cauza valorii NULL.
Operatorul LIKE
Operatorul LIKE ne dă posibilitatea de a folosi caractere speciale în text. Caracterele speciale sînt acele caractere care au o semnificație specială când sînt folosite în condiția de căutare. Caracterul (%) va semnifica – unul sau mai multe caractere, (_) – un singur caracter.
De exemplu:
SELECT LAST_NAME, FIRST_NAME, EMP_NO FROM EMPLOYEE
WHERE LAST_NAME LIKE "%an";
Ca rezultat vom obține:
LAST_NAME FIRST_NAME EMP_NO
Ramanathan Ashok 45
Steadman Walter 46
Operatorii Logici
Toate exemplele de până acum au inclus numai câte o condiție de căutare. Însă, în SQL avem posibilitatea de a include orice număr de condiții de căutare în clauza WHERE combinându-le cu ajutorul operatorilor AND sau OR.
Când AND apare între condițiile de căutare, ambele condiții trebuie să fie adevărate pentru ca înscrierea să fie întoarsă. De exemplu:
SELECT DEPT_NO, LAST_NAME, FIRST_NAME, HIRE_DATE
FROM EMPLOYEE
WHERE DEPT_NO = 623 AND HIRE_DATE > "01-Jan-1992";
Această cerere întoarce informație despre salariații departamentului 623 care au fost angajați la lucru după 1 Ianuarie 1992.
Când OR apare între condițiile de căutare, numai una din condiții trebuie să fie adevărată pentru ca înscrierea respectivă să fie întoarsă.
Ca exemplu de utilizare a operatorului OR vom folosi cererea de mai jos:
SELECT CUSTOMER, COUNTRY
FROM CUSTOMER
WHERE COUNTRY = "USA" OR COUNTRY = "Canada";
Această cerere întoarce înscrierile ce se referă la cumpărătorii din USA și Canada.
Când introducem condiții de căutare compuse, trebuie să ținem cont de ordinea de evaluare a condițiilor. Să presupunem că dorim să obținem salariații din departamentul 623 sau 600 care au fost angajați la serviciu mai târziu de 1 Ianuarie 1992.
Funcțiile agregate
SQL pune la dispoziție funcții agregate care calculează o singură valoare dintr-un grup de valori. Grupul de valori sunt toate datele dintr-un câmp particular pentru setul dat de înscrieri. Funcțiile agregate pot fi folosite în cadrul clauzei SELECT, sau oriunde în cadrul instrucțiunii SELECT unde se folosește valoarea.
Tabelul de mai jos prezintă funcțiile agregate valabile în InterBase:
Funcția Ce face această funcție
AVG(value) Întoarce valoarea medie pentru un grup de înscrieri.
COUNT(value) Calculează numărul înscrierilor care satisfac clauzei WHERE.
MIN(value) Întoarce valoarea minimă dintr-un grup de înscrieri.
MAX(value) Întoarce valoarea maximă dintr-un grup de înscrieri.
SUM(value) Adună valorile numerice într-un grup de înscrieri.
De exemplu, să presupunem că dorim să știm câte coduri de lucru diferite există în tabelul JOB.
Vom introduce următoarea instrucțiune
SELECT COUNT(JOB_CODE) FROM JOB;
Rezultatul este:
COUNT
31
Însă, acesta nu este rezultatul dorit, deoarece cererea include coduri de lucru dublate în cadrul contorului. Pentru a calcula numai coduri de lucru unice, vom folosi cuvântul cheie DISTINCT:
SELECT COUNT(DISTINCT JOB_CODE) FROM JOB;
Rezultatul corect va fi:
COUNT
14
Clauza HAVING
La fel ca și clauza WHERE care reduce numărul înscrierilor întoarse de clauza SELECT, clauza HAVING poate fi folosită pentru a reduce numărul de înscrieri întoarse de clauza GROUP BY. La fel ca și clauza WHERE, clauza HAVING are condiție de căutare. În clauza HAVING condiția de căutare corespunde tipic unei funcții agregate folosite în clauza SELECT.
Ca exemplu vom introduce o cerere care va afișa numai departamentele principale a căror bugete totale sînt mai mari de 2,000,000:
SELECT HEAD_DEPT, SUM(BUDGET)
FROM DEPARTMENT
GROUP BY HEAD_DEPT
HAVING SUM(BUDGET) > 2000000;
Această cerere va genera următorul rezultat:
HEAD_DEPT SUM
000 3500000.00
100 3800000.00
600 2350000.00
Clauza ORDER BY
De obicei, cererea întoarce înscrieri în “ordinea naturală”, ordine în care înscrierile sînt găsite în tabel. Deoarece păstrarea datelor în tabele este de obicei neordonată (nesortată), rezultatul cererii va fi de asemenea nesortat. Clauza ORDER BY sortează rezultatul în acord cu câmpul specificat. Fiecare coloană din clauza ORDER BY trebuie de asemenea să apară și în clauza SELECT a instrucțiunii.
De exemplu, vom culege instrucțiunea:
SELECT LAST_NAME, FIRST_NAME, PHONE_EXT
FROM EMPLOYEE
ORDER BY LAST_NAME;
Această cerere sortează rezultatul după numele de familie a salariaților.
Joncțiunea tabelelor
JOIN permite instrucțiunii SELECT să primească date din două sau mai multe tabele din baza de date. Tabelele sînt listate în clauza FROM. Clauza opțională ON poate reduce numărul de înscrieri întoarse, iar clauza WHERE va reduce ulterior numărul de înscrieri întoarse.
Din informația din SELECT care descrie joncțiunea, InterBase creează un tabel care conține rezultatele operației de joncțiune, tabelul rezultat, numit deseori tabel dinamic sau virtual.
InterBase suportă două tipuri de bază de joncțiune: joncțiune internă și joncțiune externă.
Joncțiunile interne leagă înscrierile din tabele bazându-se pe condiții de joncțiune specificate și întorc numai acele înscrieri care satisfac condiției de joncțiune. Dacă câmpul care va fi joncționat conține valoarea NULL pentru înscrierea dată, această înscriere nu va fi inclusă în tabelul rezultat. Joncțiunele interne sunt mai larg utilizate deoarece ele restricționează datele întoarse și prezintă relația clară dintre două sau mai multe tabele.
Joncțiunile externe leagă înscrierile din tabele bazându-se pe condiții de joncțiune specificate dar întoarce înscrieri indiferent dacă acestea satisfac condițiilor de joncțiune sau nu.
Joncțiunea internă
Există trei tipuri de joncțiuni interne:
Joncțiunea de egalitate (equi-joins) – leagă înscrierile bazându-se pe valoarea comună sau egalitatea relațională în câmpurile de legătură.
Joncțiunea care leagă înscrierile bazându-se pe compararea diferită de egalitate în câmpurile de legătură. Nu există o denumire oficial recunoscută pentru astfel de joncțiuni, dar pentru simplicitate ele pot fi numite joncțiuni comparative (comparative joins) sau (non-equi-joins).
Joncțiuni reflexive (reflexive sau self-joins), compară valorile in cadrul câmpului a unui singur tabel.
Pentru a specifica instrucțiunea SELECT ca o joncțiune internă, trebuie să listăm tabelele care vor fi joncționate în clauza FROM, și să listăm câmpurile care vor fi comparate în clauza WHERE. Sintaxa simplificată este:
SELECT <columns>
FROM <left_table> [INNER] JOIN <right_table>
[ON <searchcondition>]
[WHERE <searchcondition>];
Condiția de căutare bazată pe câmpul din tabelul din dreapta poate fi specificată în clauza opțională ON urmând referința tabelului din dreapta.
De exemplu, să considerăm următoarea cerere acre include joncțiune internă:
SELECT D.DEPARTMENT, D.MNGR_NO, E.SALARY
FROM DEPARTMENT D JOIN EMPLOYEE E
ON D.MNGR_NO = E.EMP_NO
AND E.SALARY*2 > (SELECT SUM(S.SALARY) FROM EMPLOYEE S
WHERE D.DEPT_NO = S.DEPT_NO)
ORDER BY D.DEPARTMENT;
Clauza SELECT de mai sus folosește nume corelaționale D pentru DEPARTMENT și E pentru EMPLOYEE (cum este specificat în clauza FROM) pentru a selecta numele departamentului și numărul managerului din tabelul DEPARTMENT și salariul managerului din tabelul EMPLOYEE.
Clauza ON conține o condiție de joncțiune compusă:
Câmpul MNGR_NO din tabelul DEPARTMENT trebuie să coincidă cu câmpul EMP_NO din EMPLOYEE.
Salariul managerului dublat (E.SALARY*2) trebuie să fie mai mare decât suma tuturor salariaților din departament. Cu alte cuvinte, salariul managerului trebuie să fie mai mare decât jumătate din suma salariilor tuturor salariaților din departament.
Joncțiunea externă
Joncțiunea externă produce tabelul rezultat care conține câmpuri din orice înscriere dintr-un tabel și un subset de înscrieri din alt tabel. Sintaxa joncțiunii externe este foarte asemănătoare cu cea a joncțiunii interne:
SELECT col [, col …] | *
FROM <left_table> {LEFT | RIGHT | FULL} [OUTER] JOIN
<right_table> [ON <searchcondition>]
[WHERE <searchcondition>];
Însă, în cazul joncțiunii externe este necesar de a specifica tipul joncțiunii. Există trei posibilități:
Joncțiunea externă de stânga obține toate înscrierile din tabelul din stânga a joncțiunii, și fiecare înscriere din tabelul din dreapta care satisfac condiției de căutare specificate în clauza ON.
Joncțiunea externă de dreapta obține toate înscrierile din tabelul din dreapta a joncțiunii, și fiecare înscriere din tabelul din stânga care satisfac condiției de căutare specificate în clauza ON.
Joncțiunea externă totală obține toate câmpurile din ambele tabele din joncțiune neluând în considerație condiția de căutare specificată în clauza ON
Joncțiunea externă este utilă în așa cazuri când dorim, de exemplu, când afișăm salariații care sînt încadrați în proiect, poate fi interesant de a vedea salariații ce nu sînt încadrați în acest proiect.
Joncțiunea externă de mai jos întoarce numele salariaților din tabelul EMPLOYEE și ID-urile proiectelor din tabelul EMPLOYEE_PROJECT, pentru salariații ce sînt încadrați în proiect.
SELECT PROJ_ID, FULL_NAME
FROM EMPLOYEE LEFT OUTER JOIN EMPLOYEE_PROJECT
ON EMPLOYEE.EMP_NO = EMPLOYEE_PROJECT.EMP_NO;
În exemplul de mai sus sunt specificați toți salariații din tabelul EMPLOYEE, cu excepția celor care sînt incluși în proiect, deoarece EMPLOYEE este tabelul din stânga joncțiunii.
3. Descrierea bazei de date “Evidenta tehnicii de calcul”, programului “Inside”.
3.1. Descrierea structurii bazei de date “Evidenta tehnicii de calcul”.
Baza de date „Evidenta tehnicii de calcul” este implementată în sistemul de gestiune al bazelor de date (SGBD) InterBase Server versiunea 5.1.1.680 al firmei INTERBASE Software. Deoarece va fi necesar ca în fiecare an să fie creată baza de date am implementat un SQL script care creează obiectele bazei de date necesare pentru funcționarea sistemului informațional. Aceste obiecte sunt: domeniile de date definite, tabelele, trigherele, generatoarele, indexurile, cheile primare și străine (referințe), etc. După lansarea acestui SQL script noi obținem baza de date gata pentru exploatare de către programele pentru introducerea datelor referitoare la tehnica, parole de acces, ce apoi permit introducerea datelor despre utilizatori, cabinete, tehnicii de calcul cu evaluarea statisticilor și rapoartelor atât pe parcursul exploatării cât și după finisarea culegerii informațiilor. De asemenea utilizarea unui SQL script este mai comodă și din punct de vedere a flexibilității bazei de date, noi putem modifica baza de date înainte de a o crea. De asemenea SQL scriptul este foarte ușor de transferat la altă SGBD relațională care suportă standardul ANSI SQL.
Pentru a micșora volumul de informație necesară pentru păstrarea datelor referitoare la tehnica au fost construite tabelele: users, machines . Tabelul pentru păstrarea informației referitoare la users conține următoarele câmpuri:
first_name – pentru păstrarea numelui utilizatorului,
last_name – pentru păstrarea prenumelui,
rights – pentru păstrarea dreptului de acces.
Tabelul pentru păstrarea informației referitoare la rooms conține următoarele câmpuri:
name – pentru păstrarea numelui complet al cabinetului de lucru a utilizatorului,
description – pentru păstrarea informatiei legate cu acest cabinet,
Tabelul pentru păstrarea datelor referitoare la la tehnica de calcul se numește machines și conține 9 de câmpuri.
name – modelul calculatorului.
processor – tipul procesorului.
RAM – tipul memoriei RAM.
video – tipul cartei video
price – pretul la care a fost procurat calculatorul.
Room_name – cabinetul in care activeaza calculatorul .
description – descrierea generala a calculatorului.
Structura tabelelor bazei de date poate fi reprezentată în felul următor. fig. 3.1.
Fig. 3.1. Structura bazei de date “Evidenta tehnicii de calcul”.
Pentru tabelul users este creat generatorul id_users care este utilizat în trigherul before insert set_users care generează o valoare id_users nouă, de fiecare dată când este introdusă o valoare nouă.
Pentru tabelul rooms este creat generatorul id_rooms care e utilizat în trigherul set_rooms pentru generarea numerelor unice ale cabinetelor id_rooms, de fiecare dată cum este introdusă un cabinet nou.
Pentru generarea numărului unic al tehnicii utilizăm generatorul id_machines. Deoarece e necesar de a prezenta acest număr la efectuarea introducerii datelor de către operatori, setarea generatorului se va efectua din programul aplicație, ci nu din trigher.
3.2. Descrierea programului “Inside” al bazei de date “Evidenta tehnicii de calcul”
Programul “Inside” este destinat gestiunii informației de ordin general, așa cum ar fi introducerea, modificarea, ștergerea datelor referitoare la denumirile depline și prescurtate a utilizatorilor si tehnicii de calcul, parolelor de acces a operatorilor.
Pentru a activa acest program este nevoie de a introduce parola utilizatorului bazei de date cu acces deplin.
Programul “Inside” este efectuat în mediul vizual de programare pe obiect C++ Builder v.3.0 al firmei Inprise. Programul este efectuat pe diferite forme care sunt activate cu ajutorul butoanelor de pe forma principală. Forma principală nu conține nimic mai mult decât aceste butoane de chemare a formelor pentru gestiunea respectiv a utilizatorilor, tehnicii.
Cum s-a vorbit mai sus prezenta baza de date contine 3 forme si anume: users, rooms, machines.
Figura 3.2. Forma pentru introducerea datelor referitoare la utilizatori.
Această formă este destinata pentru introducerea datelor despre utilizatori si anume: numele, prenumele, login( fiecare utilizator isi are arm-ul sau), drepturile de acces .
Ca sa fie mai clar mai jos vom prezenta secventa de program care este utilizata pentru crearea acestei fome :
//Crearea tabelului Users//
this.UsersTab.Controls.AddRange(new System.Windows.Forms.Control[] {
this.CBRights,
this.label4,
this.TBLogin,
this.label3,
this.TBLName,
this.label2,
this.TBFName,
this.label1});
this.UsersTab.Location = new System.Drawing.Point(4, 22);
this.UsersTab.Name = "UsersTab";
this.UsersTab.Size = new System.Drawing.Size(688, 158);
this.UsersTab.TabIndex = 0;
this.UsersTab.Text = "Users";
O alta forma a bazei de date este forma folosita pentru introducerea datelor privind cabinetele in care se afla tehnica de calcul, asa date cum: name(adica numele cabinetului, sectia de creditare etc ), description(descrierea pe scurt a cabinetului).
Figura 3.3. Forma pentru introducerea datelor referitoare la cabinetele.
Secventa de program care creaza aceasta forma:
// Crearea tabelului Rooms //
this.RoomsTab.Controls.AddRange(new System.Windows.Forms.Control[] {
this.TBRDesc,
this.label14,
this.TBRName,
this.label13});
this.RoomsTab.Location = new System.Drawing.Point(4, 22);
this.RoomsTab.Name = "RoomsTab";
this.RoomsTab.Size = new System.Drawing.Size(688, 158);
this.RoomsTab.TabIndex = 2;
this.RoomsTab.Text = "Rooms";
A treia si ultima forma este forma care duce evidenta tehnicii de calcul. Aceasta forma contine urmatoarele date: name(marca calculatorului), processor, motherboard, Ram, video, price, room_name, description.
Figura 3.4. Forma pentru introducerea datelor referitoare la tehnica de calcul.
Secventa de program care creaza aceasta forma:
// Crearea tabelului Machines //
this.MachinesTab.Controls.AddRange(new System.Windows.Forms.Control[] {
this.TBMDesc,
this.label12,
this.TBRoomName,
this.label6,
this.TBPrice,
this.label9,
this.TBMisc,
this.label10,
this.TBVideo,
this.label11,
this.TBRam,
this.label7,
this.TBMother,
this.label8,
this.TBProc,
this.label5,
this.TBMName,
this.XXX});
this.MachinesTab.Location = new System.Drawing.Point(4, 22);
this.MachinesTab.Name = "MachinesTab";
this.MachinesTab.Size = new System.Drawing.Size(688, 158);
this.MachinesTab.TabIndex = 1;
this.MachinesTab.Text = "Machines";
4. Protecția muncii și sanitarie de producere
Proiectul de diplomă prezintă elaborarea unui set de programe pentru culegerea și prelucrarea informației. Rezultă problema protecției muncii atât a persoanelor care elaborează programele, cât și a utilizatorilor ei. Lucrările în sistemul menționat vor fi efectuate utilizând calculatoare personale, adică prezintă lucrul programatorilor și a operatorilor tehnicii de calcul, e necesar de a precauta cerințele pentru protecția muncii la lucrul cu tehnica de calcul, în special a calculatoarelor personale cu diferite sisteme periferice, utilizate de către personalul centrului de calcul (CC) în procesul activității vitale. Evident, integrarea și utilizarea pe larg a calculatoarelor electronice pe lângă factorii pozitivi mai are și nuanțe negative asupra persoanelor care le exploatează.
Lucrul operatorilor tehnicii de calcul necesită o atenție mare, posibilitatea de a rezolva în timp limitat probleme complexe, responsabilitatea față de acțiunile întreprinse ce duce la o tensionare emoțională și stres.
Operatorii tehnicii de calcul, programatorii, și alți colaboratori ai CC sunt supuși unor factori nocivi și periculoși cum ar fi:
nivelul ridicat de zgomot;
insuficiența iluminatului natural;
insuficiența iluminatului locurilor de muncă;
temperatura ridicată a mediului ambiant;
diferite forme de iradieri, etc.
Acțiunea factorilor indicați duce la micșorarea capacității de muncă, ca rezultat al obosirii. Apariția și dezvoltarea obosirii este legată de schimbările, ce apar în procesul muncii în sistemul nervos central, cu procese de încetinire în creier. De exemplu, zgomotul mare conduce la dificultăți în perceperea semnalelor colore, micșorează viteza de percepție a culorilor, adaptarea vizuală, micșorează capacitatea de a acționa rapid și efectiv, micșorează cu 5-12% capacitatea de muncă și duce la deteriorarea auzului.
Aflarea îndelungată a persoanei într-un mediu în care acționează mai mulți factori nocivi poate duce la o îmbolnăvire profesională.
Pentru crearea condițiilor de lucru prielnice e necesar de a lua în considerare particularitățile psiho-fiziologice ale oamenilor, plus starea igienică generală. Un rol important îl are amplasarea postului de lucru, economia energiei electrice și timpului operatorului, utilizarea rațională a suprafețelor utilizate, comodității utilizării tehnicii de calcul, respectarea regulilor de protecție a muncii.
4.1. Zgomotul
Zgomotul este unul din factori care influențează omul când el lucrează cu CE, aceasta este condiționat de funcționarea dispozitivelor ce sunt necesare în CC.
Sursele principale de zgomot în încăperi amenajate cu tehnica de calcul sunt imprimantele, tastatura, instalații pentru condiționarea aerului, dar în CE – ventilatoarele sistemelor de refrigerare și transformatoare.
La influența zgomotului pe un timp îndelungat la colaboratorii CC se observă micșorarea atenției, dureri de cap, se micșorează capacitatea de muncă. În documente de însoțire a utilajului ce produc zgomot se aduc normele timpului de lucru la acest utilaj.
În conformitate cu GOST 12.1.003-91 “Zgomot. Cerințele generale de protecție” caracteristica de normă a zgomotului locurilor de muncă sunt nivelurile presiunii de sonor (zgomot). Nivelurile accesibile a zgomotului, lucrând cu CE, sunt prezentate în tabelul 1:
Nivelurile admisibile a zgomotului. Tabelul 4.1.
Pentru micșorarea zgomotului la locurile de muncă se efectuează următoarele acțiuni:
Arhitectural-planificative. Clădirile se proiectează și se construiesc în așa mod ca la locurile de muncă să nu fie depășit nivelului admisibil. Întrucât sistemul va fi utilizat la CC existent aici se poate de obținut micșorarea zgomotului amplasând în încăperi vecine utilajului cu zgomot ridicat.
Tehnico-organizatorice. Pentru micșorarea zgomotului la CC se efectuează reparația și ungerea utilajului (imprimantelor). Se poate de aranjat utilajul în așa fel ca el să facă mai puțin zgomot.
Acustice. În CC se instalează podele tehnologice și poduri fixate în balamale. Distanța între podul de bază și podul fixat în balamale 0,5-0,8 m, iar înălțimea podelei tehnologice 0,2-0,6 m.
4.2. Securitatea electrică
Utilajul CE este foarte periculos pentru operatori, deoarece lucrând la acest utilaj operatorul poate să atingă unele părți care sunt sub tensiune. Trecând prin om curentul electric efectuează influența optică, biologică termică, ce poate aduce la traumă electrică (GOST 12.1.009-91).
O importanță mare pentru emiterea cazurilor neplăcute și periculoase are organizarea corectă a exploatării utilajului electric, efectuarea lucrărilor de montare și profilactică.
Legarea la nul este o măsură de protejare de electrocutare prin deconectarea strictă și în viteză a rețelei în caz de apariție a tensiunii pe carcasă sau în cazul străpungerea izolării. Deconectarea strictă se efectuează, dacă curentul de scurt circuit format prin faza și firul nul este destul de mare ca declanșatorul să lucreze corect.
Scopul calculării este determinarea secțiunii firului nul, care satisface condiția funcționării protecției maximale de curent. Valoarea protecției se determină după puterea instalației electrice proiectate.
Curentul de scurtcircuit trebuie să fie mai mare de trei ori decât curentul nominal a siguranței Is.c. ≥ 3In
4.3. Microclimatul
Deoarece CE sunt surse de eliminare a căldurii, ce poate ajunge la mărirea temperaturii și micșorarea umidității aerului. În încăperi se atrage atenție la controlul parametrilor microclimatului în Săli de Calcul (SC). În SC mărimea medie a eliminărilor de căldură constituie 310 W/m2. Eliminările de căldură de la instalații de iluminare tot sunt mari, mărimea specifică a lor este 35-60 W/m2. În afară de aceasta la microclimatul încăperi încă influențează surse exterioare de eliminare a căldurii, cum sunt căldura de la radiația solară ce intră prin fereastră, și afluența căldurii prin construcții de barieră ce nu sunt transparente.
Asupra corpului omului și lucrului utilajului a CC influențează foarte mult umiditatea aerului relativă. La umiditatea aerului egală cu 40% lenta magnetică devine mai fragilă, se mărește uzura capilor magnetice și apare câmpul magnetic static la mișcarea purtătorilor de informației în CE.
La efectuarea controlului locurilor de muncă se măsoară temperatura, umiditatea relativă și viteza de mișcare a aerului în încăperi, totodată se efectuează măsurări la începutul, mijlocul și sfârșitul perioadelor calde și rece a anului.
Se măsoară temperatura și umiditatea aerului cu psihometre aspiratoare, iar viteza de mișcarea a aerului – cu electro-anemometre, catatermometre. Ordinea de măsurare a indicilor microclimatului se stabilește în conformitate cu GOST 12.1.005-91. Parametrii se normează după acest GOST și sunt prezentați în tabelul 4.2.
Normele microclimatului. Tabelul 4.2.
În acest tabel se aduc parametrii pentru categoriile de lucru 1a (mai puțin de 120 kkal/oră, lucrul șezând) și 1b (de la 120 până la 150 kkal/oră, lucrul șezând), deoarece lucrul programatorului sau operatorului se poate atribui la una din aceste categorii.
Pentru crearea la locuri de muncă a condițiilor meteorologice bune se efectuează condiționarea și ventilarea aerului, utilizarea ventilatoarelor înăuntru CE pentru a reduce eliminările de căldură. Utilajul se aranjează în așa fel ca influența căldurii asupra corpul omului va fi cea mai mică.
4.4. Securitatea antiincendiară
Focul este o forță gigantică. Oamenii antici vedeau în el o sursă a vieții și în prezent el încălzește și hrănește doar cu acea diferență că pentru contemporanul nostru la nivelul actual de dezvoltare a condițiilor sociale că această întrebare a scăzut cu mult. Însă acest fapt nu ne permite să neglijăm focul, doar o mică neatenție și marea lui forță poate aduce o nenorocire. Iată de ce e atât de important rolul securității antiincendiare în organizarea protecției muncii la întreprinderi și în încăperi administrative.
Incendiul se numește arderea necontrolată în afara unui focar special care aduce pierderi materiale. Dacă această ardere nu cauzează pierderi materiale, atunci ea se numește inflamare. Explozia este o transformare chimică momentană, caracterizată prin degajarea de energie și crearea de gaze comprimate.
După gradul de ardere (oxidare însoțită de degajarea unei cantități mari de căldură) materialele de construcție se împart în următoarele tipuri: nearzătoare – sub acțiunea focului nu se inflamează, nu se corodează; greu inflamabile – sub acțiunea focului se inflamează, se carbonizează doar în prezența sursei de inflamare, iar după lichidarea ei arderea sau carbonizarea încetează (materialele se gips sau beton, materiale din argilă); inflamabile – sub acțiunea focului se inflamează și se carbonizează și continuă acest proces și după lichidarea sursei de inflamare (toate materialele organice, ce nu corespund cerințelor indicate anterior).
Materialele, ce posedă capacități ridicate de inflamabilitate se numesc periculoase din punct de vedere incendiar, iar capabile de explozii și detonare fără participarea oxigenului.
Cauzele incendiilor și exploziilor pot fi electrice după caracter și neelectrice. La categoria electrice se referă: scânteia în aparatele electrice, descărcările electrostatice, fulgerele ș.a.
Cauzele incendiilor și exploziilor cu caracter neelectric pot fi: exploatarea incorectă a aparatului de sudură cu gaz, pistoalele de lipit, dereglarea dispozitivelor de încălzire, a echipamentului de producție, încălcarea procesului tehnologic ș.a.
În dependență de procesele tehnologice și proprietățile materialelor după gradul de pericol incendiar și exploziv încăperile și clădirile se împart în cinci categorii A, B, V, G, D în conformitate cu normele proiectării tehnologice.
Aceste categorii sînt stabilite și aprobate de către ministerele ramurilor corespunzătoare. Majoritatea clădirilor industriei radioelectronice se referă la categoria V.
Clădirile și edificiile se împart după gradul de stabilitate antiincendiară (SNIP 201.02-85), care se determină de limitele minimale de stabilitate incendiară ale construcțiilor de bază și limitele maximale de răspundere în ele a focului. Aceste limite se determină în baza testării probelor în cuptoare speciale.
Protecția antiincendiară a obiectelor naționale este reglementată de STAS 12.11.033-81 “Cerințe generale”, normelor și regulilor constructive, regulilor protecției antiincendiare a ramurii.
Factorii principali pentru viața omului ce apar în timpul incendiului sunt: focul deschis, temperatura ridicată a aerului și obiectelor, produsele toxice ce ard, fumul, micșorarea concentrației de oxigen în aer, distrugerea încăperilor, echipamentului și explozia.
Pentru prevenirea incendiului trebuie luate următoarele măsuri:
excluderea apariției mediului arzător;
excluderea apariției în mediul arzător a surselor de inflamare;
menținerea temperaturii și presiunii mediului arzător mai jos de nivelul maxim admisibil de ardere.
Pentru prevenirea incendiului sunt aplicate un șir de măsuri. Barajele antiincendiare din clădiri și edificii la care se referă pereții antiincendiari, barajele și acoperirile antiincendiare, ușile și altele trebuie să fie executate din materiale ne inflamabile și de asemenea să fie prevăzută autoînchiderea lor. Ferestrele antiincendiare nu trebuie să aibă posibilitate de deschidere.
Pentru anunțul incendiului se utilizează legăturile radio și telefonice, sirenele, traductoare de semnalizare a incendiului. Fiecare unitate economică trebuie să dispună de mijloace de legătură pentru chemarea urgentă a pompierilor. Toate mijloacele de legătură antiincendiare trebuie să aibă acces deschis în orice timp.
Cel mai răspândit și ieftin mijloc de stingere a incendiului este apa care permite consumarea efectivă a căldurii aruncate de focarele de incendiu. Totodată apa nu poate fi folosită pentru stingerea lichidelor ușor inflamabile (benzină, gazul lampant, uleiuri minerale) și a materialelor care în contact cu ea elimină substanțe inflamabile (carbonatul de calciu).
În încăperile închise pentru lichidarea incendiului se recomandă utilizarea vaporilor de apă atât pentru stingerea materialelor solide cît și a substanțelor lichide.
În condițiile de laborator pentru stingerea incendiului poate fi folosit instinctorul cu volumul de șapte litri ce conține 97% etil bromic și 3% soluție de oxid carbonic. Componența aflată sub presiune în timpul utilizării se elimină sub formă de spumă. Durata funcționării este de circa 40s, distanța de aplicare – 4- 5 metri. El se utilizează la stingerea instalațiilor electrice aflate sub tensiune, deoarece brom etilul nu conduce curentul electric. Pentru protecția oamenilor de produsele toxice ale arderii și de fum se utilizează ventilatoarele și canalele de ventilare.
4.5. Radiație
Intensitatea radiației Roentgen de energie joasă se controlează la locuri de muncă cu monitoare, care lucrează sub tensiunea la cinescop 15 kV și mai mult. Norma nivelului de radiație roentgen este 100 mcP/oră, dar în timpul de azi se utilizează mai mult monitoare cu nivelul radiație mai mică, ce aduce la micșorarea influenței factorilor dăunători asupra programatorului sau operatorului. La efectuarea tezei de licență a fost utilizat monitorul cu tensiunea la cinescop mult mai mică de 15 kV, și de aceea acest factor nu a fost înregistrat de dispozitiv, adică a fost mai puțin de normă.
Încă se măsoară și se normează intensitatea radiației ultraviolete (la lungimea de undă 336 nm) și infraroșie (la lungimea de undă 700 – 1050 nm) ce influențează asupra omului, nu trebuie să depășească 10 W/m2.
Radiația electromagnetică se normează după componente electrice (50 V/m) și magnetice (50 A/m) de aflare în această zonă de radiere în timp de 8 ore. Tensiunea înaltă a câmpului electric între monitorul și operatorul aduce la efecte neplăcute. La distanța de 5 – 30 cm de la monitor tensiunea nu trebuie să depășească nivelul admisibil după norme, ce sunt stabilite în dependența de timpul aflării la locul de muncă. Niveluri admisibile de tensiune sunt prezentate în tabelul 3.
Niveluri admisibile de tensiune. Tabelul 4.3.
Controlul radiației de toate tipurile se efectuează în conformitate cu regulile ce sunt expuse în îndrumare speciale.
4.6. Parametrii vizuali a imaginii
Efectuând controlul asupra condițiilor de lucru la locuri de muncă cu monitoare trebuie să fie măsurate și evaluate următorii parametri a imaginii:
deformarea imaginii;
contrastul de strălucire a imaginii;
variația strălucirii elementelor simbolului;
lungimea, lățimea, raportul lățimii la lungimea;
lățimea liniei de contur a simbolului;
modulație de strălucire a rasterului;
distanța între cuvinte, rânduri;
vibrația și fugă (licărire) imaginilor.
Prezența sau lipsa licăririi imaginii se stabilește după metode experimentale sau de calcul. Metoda experimentală permite de evaluat și vibrarea imaginii. Prezența vibrării se determină prim metodă măsurărilor directe. Celelalte caracteristici a ecranului se stabilesc după rezultatele măsurărilor directe și indirecte. După control, parametrii se compară cu recomandațiile prezentate în tabelul 4.4.
Parametrii monitorului. Tabelul 4.4.
Totodată o importanță mare are rezoluția ecranului, care se determină de tipul adaptorului grafic (CGA, EGA, VGA, SVGA), adică cât mai mare este rezoluția ecranului atât mai bună este imaginea.
4.7. Efecte psihofiziologice
Lucrul operatorilor cere încordarea mintală și emoțională foarte mare, concentrarea atenției și responsabilitatea de lucrul efectuat. Operatorii foarte des suferă de diferite stări proaste a vederii, dureri de cap, dureri de mușchi în regiunea spatelui. În afară de asta, în mare măsură se exprimă senzația oboselii și încordarea mintală în timpul lucrului; ei nu se simt odihniți după somn de noapte.
Sarcina asupra vederii și caracterul încărcării lucrului provoacă la operatori disfuncția stării a analizatorului de vedere și sistemei nervoase centrale. În procesul de lucru la dânșii se micșorează rezistența vederii clare, sensibilitatea electrică și labilitatea analizatorului de vedere, și încă apar disfuncții a mușchilor ochilor.
Sunt interesante cercetările stării psihofiziologice a operatorilor de introducere a datelor, care efectuează lucrul monoton în timp de 2 ore în condiții favorabile de muncă. Tot odată s-a arătat că din 80% de persoane supuse experienței capacitatea de lucru și activitatea mintală se micșorează peste 45 – 60 minute de lucrului neîntrerupt. În afară de aceasta la persoanele supuse experienței la sfârșitul zilei de lucru sa mărit timpul de reacție și cantitatea greșelilor la executarea problemelor. S-a micșorat frecvența de contractare a inimii de la 64 până la 40 batăi/min; la 74% persoane s-a tulburat bilanțul mușchilor ochiului.
Efectuarea multor operații la CC cer încărcarea îndelungată a mușchilor spatelui, gâtului, mâinilor și picioarelor ce aduce la apariția oboselii. Motive principale de apariția oboselii sunt înălțimea irațională a suprafeței de lucru, masei și scaunului, lipsa spatelui de sprijin și brațelor, unghiuri incomode de îndoire în articulațiile umărului și cubitului, unghiul de înclinare a capului, repartizare incomodă a documentelor, monitoarelor și tastaturii, lipsa spațiului și suportului pentru picioare.
4.8. Iluminatul
La lucrul cu CE o importanță mare are crearea mediului de iluminare optimal, adică organizarea rațională iluminatului natural și artificial în încăperi și la locuri de muncă, deoarece lucrând la CE încărcarea în general cade pe organe de vedere. Dacă omul lucrează mai mult de o jumătate a zilei de lucru la CE la el se observă înrăutățirea vederii, ce constituie 62-94%. Asta în primul rând este oboseala ochilor, dureri foarte mari și simțul de nisip în ochi, mâncărime și senzație de usturare în ochi. Totodată senzațiile dureroase în ochi apar în general la sfârșitul zilei de lucru. Din această cauză toate locurile de muncă cu CE se amplasează în locuri ce sunt protejate de căderea luminii difuzate pe ecranul terminalului. Pentru asta se utilizează încăperi cu iluminarea unilaterală (într-o singură direcție), totodată ferestrele trebuie să fie cu storuri sau jaluzele pentru excluderea efectului de orbire și strălucirea ecranului terminalului.
Iluminarea artificială a locului de muncă se efectuează în felul următor, nivelul iluminării locului de muncă trebuie să corespundă caracterului de lucru vizual, iluminarea încăperii să nu depindă de timpul de afară, fluxurile de lumină să aibă direcția optimală și utilajul trebuie să fie economic, inofensiv, durabil și simplu în exploatare.
La instalarea iluminatului artificial se fac următoarele măsurări:
iluminarea la locuri de muncă;
caracterul de strălucire a ecranului, mesei;
strălucirea petelor reflectate în ecran.
Se efectuează măsurări de control a iluminării și strălucirii la locuri de muncă cu diferite terminale care sunt în încăperi și care se află în diferite condiții de iluminare, acolo unde sunt plângeri ale personalului. Măsurarea iluminatului se efectuează în timpul întuneric a zilei.
Punctele de control pentru măsurările iluminatului la locuri de muncă se amplasează:
în centrul ecranului;
pe tastatură;
pe document în planul amplasării lui;
pe masă în zona de lucru.
Efectuarea măsurărilor se efectuează în conformitate cu GOST 2.4.940-91. Măsurarea caracterului de strălucire a ecranului se efectuează la strălucirea ecranului nu mai puțin de 35 c/m2. Iluminarea locului de muncă se normează după SniP II-4-91 și depinde de caracterul lucrului vizual, contrastul obiectului, fonului și tipul fonului.
4.9. Calcularea iluminatului artificial a încăperii.
Pentru organizarea activității normale a omului o mare însemnătate are crearea condițiilor normale de iluminare naturală și artificială la locul de muncă.
Iluminarea de producție, corect proiectată și îndeplinită, aduce la rezolvarea următoarelor probleme:
ea îmbunătățește condițiile de muncă,
micșorează oboseala,
contribuie la creșterea productivității muncii și a calității producției,
acționează binefăcător asupra mediului de producere,
acționează pozitiv din punct de vedere psihologic asupra lucrătorului,
ridică securitatea muncii și micșorează traumatismul în producție.
Analizatorul vizual percepe ca lumină oscilațiile electromagnetice cu lungimea de undă 380-770 nm.
Iluminarea optimă se alege în dependență de particularitățile (coeficientul de reflecție) suprafeței de lucru și detaliile ce sunt analizate pe ea (lungimea perioadei de lucru vizual, precizia, caracterul procesului de lucru).
O cerință importantă este menținerea regimului de iluminare. La iluminarea artificială devierile în rețea nu trebuie să depășească + 2.5 – 3 %.
Prin norme sunt introduse valorile minimale a iluminării care permit realizarea cu succes a lucrului vizual.
În dependență de sursa de lumină, iluminarea de producere poate fi de două tipuri: naturală (lumina de zi) și artificială, generată de lămpile electrice.
Iluminatul artificial poate fi de lucru, de pază, de serviciu, de evacuare, de avarii.
Iluminatul de lucru poate fi local, total și combinat.
Este interzis de a folosi la întreprinderile mari iluminatul local, deoarece el trebuie să constituie nu mai puțin de 10 % din iluminatul total.
Normarea iluminatului artificial se efectuează de SNiP-II-4-79.
La fel se normează iluminarea locurilor de muncă în funcție de :
1. categoria lucrului vizual
a) precizie înaltă E =5000 lx
b) fără precizie E =30 lx
2. în dependență de tipul de iluminat-adică total sau local.
3. în dependență de fon.
4. în dependență de contrast.
Raportul dintre fon și contrast indică sub categoria (a,b,c,d).
Iluminatul artificial există datorită becurilor incadiscente și fluoriscente.
Deci după cum știm, iluminatul natural este schimbător în timp sau chiar poate să nu existe, de aceia se folosește iluminatul artificial, iar pentru instalarea corectă a iluminatului artificial se fac careva calcule.
Calcularea iluminatului artificial se face conform metodei randamentului de flux de lumină.
După această metodă se găsește fluxul de lumină a becurilor care asigură iluminarea locurilor de muncă, normarea
unde:
Sp – suprafața podelei
En – iluminarea normată minimală, 500 lx (precizie mijlocie)
z – coeficientul iluminării neuniforme, Z=1.1-1.2
Kr – coeficientul de rezervă, se ține cont de tipul de becuri și de tipul de încăpere.
N – numărul de instalații de iluminat
n – numărul de becuri într-o instalație
Kuf- coeficientul utilizării de către lampele radiante a fluxului de lumina pe
suprafața calculată.
Se determină în dependență de tipul becului, coeficientului de reflectare a podelei, pereților, tavanului, indicile încăperii:
unde
A,B – dimensiunile încăperii
h – înălțimea suspensiei lămpilor de aspra suprafeței de lucru.
Kum – coeficientul de umbrire, se introduce pentru încăperile cu poziția fixă a lucrătorilor, și este egal cu 0.8-0.9.
Înălțimea lampei asupra ariei de iluminare se calculează după formula:
Hc=H-Hl-Ht;
unde
H – înălțimea încăperii 4,00 m.
Hl- distanța de la pod până la partea de jos a lampei, 0,5 m
Ht- distanța de la podea până la suprafața iluminată, 0,75 m
Hc=4,00 – 0,10 – 0,75 = 3,15 m
Calculăm i,
Având coeficientul de reflectare a tavanului și pereților egal cu 0.7 și după indicile calculat i, coeficientul de folosire a fluxului de lumină din tabel egal =0,30
Calculăm
Pentru iluminare utilizăm 10 instalații a câte 2 becuri fiecare. Alegem cea mai apropiată lampă de tipul EA-80 cu fluxul de lumină 5220 lm care asigură pe deplin iluminarea centrului de calcul.
4.10.Ecologia.
Elaborarea și exploatarea produselor soft este una din cele mai curate din punct de vedere ecologic activitatea de producere a oamenilor. Sunt utilizate numai surse de energie electrică. Hârtia nu se utilizează în cantități mari, și ea poate fi ușor reciclată după utilizare. Calculatoarele nu poluează mediul în tipul exploatării.
5. Partea economică a proiectului.
5.1. Planificarea rețea pentru elaborarea Bazei de date „ Evidenta tehnicii de calcul”
Proiectele tehnologice contemporane sunt caracterizate de următoarele particularități:
tehnica nouă utilizată este foarte complexă și este construită utilizând ultimele elaborări științifice.
accelerării vitezei de elaborare a proiectelor.
proiectele referitoare la complexele tehnicii de calcul și softului sunt supuse uzurii morale foarte rapide.
necesitatea proiectării de sistemă la elaborarea softului și sistemelor tehnice.
Toate acestea au dus la necesitatea de creare a noi metode de planificare. Una din aceste metode prezintă modelarea procesului de elaborare, adică prezentarea legăturilor și caracteristicilor lucrărilor în procesul elaborării proiectului.
Metodele tradiționale de planificare presupun utilizarea celor mai simple modele de tipul construirea diagramelor de tip consecutive și ciclice.
Dar în asemenea diagrame nu este posibil de a prezenta legăturile dintre niște lucrări, de unde rezultă imposibilitatea de a afla cât de importantă este lucrarea dată pentru executarea scopului final. Pot apărea diferite întârzieri în timp, ce apar pe porțiuni de interconectare a lucrărilor, care sunt complicat de prezentat în diagrame. De obicei, în procesul dirijării se culege informația despre lucrările efectuate și aproape nu se culege și nu se prezintă informația referitor la prognoza finisării lucrărilor viitoare, de aceia este imposibil de a prognoza rezultatele diferitor variante de soluționare la modificările planului inițial de lucru. Este de asemenea complicat de a reflectași dinamica lucrărilor, de a corecta toată diagrama în legătură cu schimbarea termenilor de efectuare a unei lucrări, ce este necesar de a efectua ca să nu schimbăm termenul de efectuare a întregului complex de lucrări.
Aceasta este doar o parte mică din neajunsurile metodelor utilizate în prezent pentru planificare și prezentarea grafică a planurilor de pregătire a producerii. Aceste neajunsuri în mare pare sunt excluse de către sistemele de planificare și dirijare în rețea utilizate în prezent.
Sistemele de planificare și gestiune în rețea prezintă un complex de metode grafice și de calcul, metode de control și de organizare, care asigură modelarea, analiza și reconstruirea dinamică a planului de executare a proiectelor complexe.
timpul minim pentru elaborarea întregului complex de lucrări;
costul minim al elaborării proiectului;
economia maximală a resurselor;
Particularitățile sistemului de planificare și gestiune în rețea în general sunt următoarele:
se realizează metoda proiectării de sistem la rezolvarea problemelor de organizare a gestiunii proceselor.
se utilizează modelul informațional-dinamic special (graful-rețea) pentru descrierea matematico-logică a procesului și calculul automat (conforma algoritmului) a parametrilor acestui proces (durata, costul, forțele de muncă, etc.)
se utilizează sisteme de calcul pentru prelucrarea datelor operative pentru calcului indicatorilor și primirea rapoartelor analitice și statistice necesare.
Documentul de bază în sistemul de planificare și gestiune în rețea este graful-rețea (modelul rețea), care prezintă modelul informațional-dinamic, în care sunt prezentate legăturile și rezultatele tuturor lucrărilor, necesare pentru atingerea scopului final.
Graful-rețea. Tabelul 5.1.
Schema 1. Graful-rețea pentru elaborarea BD “Evidenta tehnicii de calcul”.
Continuarea schemei 1. Graful-rețea pentru elaborarea BD “Evidenta tehnicii de calcul”.
Durata efectuării lucrărilor. Tabelul 5.2.
Continuarea tabelului 5.2.
Continuarea tabelului 5.2.
Componența grupului de lucru. Tabelul 5.3.
5.2. Evaluarea economică a sistemului informațional “Evidenta tehnicii de calcul”.
Executarea lucrărilor de către lucrători. Tabelul 5.4.
5.3. Calculul remunerării muncii
Remunerarea muncii în procesul de elaborare și testare ocupă un loc de bază. De acest factor depind: calitatea de asamblare, timpul de elaborare, testare, implementare. Salarizarea este un factor important în procesul de elaborare și asamblare .Micșorarea timpului de elaborare conduce la micșorarea cheltuielilor legate de elaborare.
De luat în considerație și alocațiile pentru organele sociale de asigurare, care alcătuiesc 28% din salariu..
Pentru salariu remunerat de bază sau cheltuit
Sb = 6880+3320+2065=12265lei
Salariu auxiliar (25%)
Sa =12265 0,25 = 3066,25lei.
Defalcări în Fondul Social (28%)+Fondul de pensii(1%)
Cfs = (12265+3066,25) 0,29= 4446,75lei.
Cheltuielile totale pentru achitarea salariului
Ct =15331,25+4446,75= 19778lei
Evenimentele care necesită timp de lucru cu calculatorul. Tabelul 5.5.
Programul va fi scris la calculatoare arendate cu 8 lei pe oră.
Suma cheltuielilor pentru ore-mașină va constitui
Smas = 318,00 * 8 =2544lei.
5.4. Cheltuielile materiale utilizate la elaborarea proiectului
Cheltuielile materiale utilizate la elaborarea proiectului. Tabelul 5.6.
5.5. Costul proiectului
Costul proiectului. Tabelul 5.7.
5.6. Evaluarea eficienții de la implementarea BD “Evidenta tehnicii de calcul”
Evaluarea eficienții sociale de la implementarea BD “Evidenta tehnicii de calcul”. Tabelul 5.8.
Încheiere.
Baza de date creată este implementată sub formă de SQL script, care corespunde ANSI standardelor, baza de date poate fi creată și exploatată sub un alt sistem de gestiune al bazelor de date moderne, la care Banca Sociala ar avea licență, fie și așa sisteme ca Oracle, DB2, Informix, etc. Programele utilizate nu necesită modificări, trebuie doar create driver-e de legătură cu aceste SGBD utilizând fie ODBC sau BDE.
Datele obținute în baza de date respectiva, apoi ușor pot fi transferate în baza de date a Bancii
Sociale referitoare la tehnica de calcul, ori în bazele de date a sucursalelor filialei respective.
În caz că la exploatarea pe viitor vor apărea necesități de modificare a formelor de intrare, ele trebuie efectuate atât în baza de date, cât și în programele respective. Modificările bazei de date pot fi efectuate la crearea bazei de date, introducând schimbări în SQL scripturi, sau în timpul exploatării bazei de date, utilizând instrucțiunile ALTER. Modificările programelor pot fi ușor efectuate, deoarece toate formele de lucru cu baza de date sunt implementate utilizând aceiași tehnologie de interacțiune cu SGBD. Se schimbă componentele necesare pe formă, iar apoi se introduc modificări în SQL instrucțiunea care efectuează cererea la SGBD.
Bibliografie.
1. InterBase 5 Server. Language Reference. Formă electronică
2. InterBase 5 Server. Data Definition Guide. Formă electronică
3. InterBase 5 Server. Operations Guide. Formă electronică
4. InterBase 5 Server. Programmer’s Guide. Formă electronică
5. Страуструп Б. Язык программирования С++. Formă electronică.
6. Киммел П. Borland C++ 5. -СПб.:BHV –876c.
7. Шилдт Г. Самоучитель С++. -СПб.:BHV –688c.
8. Грофф Дж. SQL полное руководство. -Kieв.:BHV –608c.
9. И. М. Разумов. Организация планирования и управления производством.
10. Грабер М. SQL: справочное руководство -:ЛОРИ – 287c.
11. Грабер М. Введение в SQL. -:ЛОРИ.
ANEXE
Anexa nr.1. În această secvență de program are loc crearea tabelelor utilizate în Baza de Date.
this.Tabs.Controls.AddRange(new System.Windows.Forms.Control[] {
this.UsersTab,
this.RoomsTab,
this.MachinesTab});
this.Tabs.Location = new System.Drawing.Point(16, 328);
this.Tabs.Name = "Tabs";
this.Tabs.SelectedIndex = 0;
this.Tabs.Size = new System.Drawing.Size(696, 184);
this.Tabs.TabIndex = 5;
//*––––––––Crearea tabelului Users––––––––-*//
this.UsersTab.Controls.AddRange(new System.Windows.Forms.Control[] {
this.CBRights,
this.label4,
this.TBLogin,
this.label3,
this.TBLName,
this.label2,
this.TBFName,
this.label1
}
);
this.UsersTab.Location = new System.Drawing.Point(4, 22);
this.UsersTab.Name = "UsersTab";
this.UsersTab.Size = new System.Drawing.Size(688, 158);
this.UsersTab.TabIndex = 0;
this.UsersTab.Text = "Users";
this.TBFName.Location = new System.Drawing.Point(120, 32);
this.TBFName.Name = "TBFName";
this.TBFName.Size = new System.Drawing.Size(120, 20);
this.TBFName.TabIndex = 1;
this.TBFName.Text = "";
//*––––––––––––––– label1––––––––––––––––-*//
this.label1.Location = new System.Drawing.Point(40, 32);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(72, 23);
this.label1.TabIndex = 0;
this.label1.Text = "First Name:";
// *––––––––––––-Crearea tabelului Machines ––––––––––-*//
this.MachinesTab.Controls.AddRange(new
System.Windows.Forms.Control[] {
this.TBMDesc,
this.label12,
this.TBRoomName,
this.label6,
this.TBPrice,
this.label9,
this.TBMisc,
this.label10,
this.TBVideo,
this.label11,
this.TBRam,
this.label7,
this.TBMother,
this.label8,
this.TBProc,
this.label5,
this.TBMName,
this.XXX
}
);
this.MachinesTab.Location = new
System.Drawing.Point(4, 22);
this.MachinesTab.Name = "MachinesTab";
this.MachinesTab.Size = new System.Drawing.Size(688, 158);
this.MachinesTab.TabIndex = 1;
this.MachinesTab.Text = "Machines";
//*–––––––––––– Crearea tabelului Rooms–––––––––––––* //
this.RoomsTab.Controls.AddRange(new
System.Windows.Forms.Control[] {
this.TBRDesc,
this.label14,
this.TBRName,
this.label13});
this.RoomsTab.Location = new
System.Drawing.Point(4, 22);
this.RoomsTab.Name = "RoomsTab";
this.RoomsTab.Size = new System.Drawing.Size(688, 158);
this.RoomsTab.TabIndex = 2;
this.RoomsTab.Text = "Rooms";
//*–––––––––––––––––––––––––––––––––––-*//
this.TBLName.Location = new System.Drawing.Point(120, 64);
this.TBLName.Name = "TBLName";
this.TBLName.Size = new System.Drawing.Size(120, 20);
this.TBLName.TabIndex = 3;
this.TBLName.Text = "";
//*––––––––––––––––––––––––––––––––––––*//
this.label2.Location = new System.Drawing.Point(40, 64);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(72, 23);
this.label2.TabIndex = 2;
this.label2.Text = "Last Name:";
//*––––––––––––––––––––––––––––––––––––*//
this.TBLogin.Location = new System.Drawing.Point(368, 32);
this.TBLogin.Name = "TBLogin";
this.TBLogin.Size = new System.Drawing.Size(120, 20);
this.TBLogin.TabIndex = 5;
this.TBLogin.Text = "";
//*–––––––––––––––––––––––––––––––––––––*//
this.label3.Location = new System.Drawing.Point(296, 32);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(56, 23);
this.label3.TabIndex = 4;
this.label3.Text = "Login:";
//*––––––––––––––––––––––––––––––––––––* //
this.label4.Location = new System.Drawing.Point(296, 64);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(56, 23);
this.label4.TabIndex = 6;
this.label4.Text = "Rights:";
//*–––––––––––––––––––––––––––––––––––* //
this.CBRights.Items.AddRange(new object[] {
"View",
"Edit"});
this.CBRights.Location = new System.Drawing.Point(368, 64);
this.CBRights.Name = "CBRights";
this.CBRights.Size = new System.Drawing.Size(120, 21);
this.CBRights.TabIndex = 7;
//*––––––––––––––––––––––––––––––––––-* //
this.TBProc.Location = new System.Drawing.Point(96, 48);
this.TBProc.Name = "TBProc";
this.TBProc.Size = new System.Drawing.Size(120, 20);
this.TBProc.TabIndex = 7;
this.TBProc.Text = "";
//*–––––––––––––––––––––––––––––––––––-*//
this.label5.Location = new System.Drawing.Point(16, 48);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(72, 23);
this.label5.TabIndex = 6;
this.label5.Text = "Processor:";
//*–––––––––––––––––––––––––––––––––––-* //
this.TBMName.Location = new System.Drawing.Point(96, 16);
this.TBMName.Name = "TBMName";
this.TBMName.Size = new System.Drawing.Size(120, 20);
this.TBMName.TabIndex = 5;
this.TBMName.Text = "";
this.XXX.Location = new System.Drawing.Point(16, 16);
this.XXX.Name = "XXX";
this.XXX.Size = new System.Drawing.Size(72, 23);
this.XXX.TabIndex = 4;
this.XXX.Text = "Name:";
//*––––––––––––––––––––––––––––––––––––* //
this.TBRam.Location = new System.Drawing.Point(96, 112);
this.TBRam.Name = "TBRam";
this.TBRam.Size = new System.Drawing.Size(120, 20);
this.TBRam.TabIndex = 11;
this.TBRam.Text = "";
//*–––––––––––––––––––––––––––––––––––-*//
this.label7.Location = new System.Drawing.Point(16, 112);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(72, 23);
this.label7.TabIndex = 10;
this.label7.Text = "RAM:";
//*–––––––––––––––––––––––––––––––––––-*//
this.TBMother.Location = new System.Drawing.Point(96, 80);
this.TBMother.Name = "TBMother";
this.TBMother.Size = new System.Drawing.Size(120, 20);
this.TBMother.TabIndex = 9;
this.TBMother.Text = "";
//*–––––––––––––––––––––––––––––––––––-*//
this.label8.Location = new System.Drawing.Point(16, 80);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(72, 23);
this.label8.TabIndex = 8;
this.label8.Text = "MotherBoard:";
//*–––––––––––––––––––––––––––––––––––*//
this.TBRoomName.Location = new
System.Drawing.Point(328, 112);
this.TBRoomName.Name = "TBRoomName";
this.TBRoomName.ReadOnly = true;
this.TBRoomName.Size = new System.Drawing.Size(120, 20);
this.TBRoomName.TabIndex = 19;
this.TBRoomName.Text = "";
//*–––––––––––––––––––––––––––––––––––-*//
this.label6.Location = new System.Drawing.Point(240, 112);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(72, 23);
this.label6.TabIndex = 18;
this.label6.Text = "Room Name:";
//*––––––––––––––––––––––––––––––––––––*//
this.TBPrice.Location = new System.Drawing.Point(328, 80);
this.TBPrice.Name = "TBPrice";
this.TBPrice.Size = new System.Drawing.Size(120, 20);
this.TBPrice.TabIndex = 17;
this.TBPrice.Text = "";
//*–––––––––––––––––––––––––––––––––––––*//
this.label9.Location = new System.Drawing.Point(240, 80);
this.label9.Name = "label9";
this.label9.Size = new System.Drawing.Size(72, 23);
this.label9.TabIndex = 16;
this.label9.Text = "Price:";
//*–––––––––––––––––––––––––––––––––––––*//
this.TBMisc.Location = new System.Drawing.Point(328, 48);
this.TBMisc.Name = "TBMisc";
this.TBMisc.Size = new System.Drawing.Size(120, 20);
this.TBMisc.TabIndex = 15;
this.TBMisc.Text = "";
//*––––––––––––––––––––––––––––––––––-*//
this.label10.Location = new System.Drawing.Point(240, 48);
this.label10.Name = "label10";
this.label10.Size = new System.Drawing.Size(80, 23);
this.label10.TabIndex = 14;
this.label10.Text = "Miscellaneous:";
//*–––––––––––––––––––––––––––––––––––*//
this.TBVideo.Location = new System.Drawing.Point(328, 16);
this.TBVideo.Name = "TBVideo";
this.TBVideo.Size = new System.Drawing.Size(120, 20);
this.TBVideo.TabIndex = 13;
this.TBVideo.Text = "";
//*–––––––––––––––––––––––––––––––––––*//
this.label11.Location = new System.Drawing.Point(240, 16);
this.label11.Name = "label11";
this.label11.Size = new System.Drawing.Size(72, 23);
this.label11.TabIndex = 12;
this.label11.Text = "Video:";
//*–––––––––––––––––––––––––––––––––––-*//
this.TBMDesc.Location = new System.Drawing.Point(488, 40);
this.TBMDesc.Multiline = true;
this.TBMDesc.Name = "TBMDesc";
this.TBMDesc.Size = new System.Drawing.Size(176, 92);
this.TBMDesc.TabIndex = 21;
this.TBMDesc.Text = "";
//*–––––––––––––––––––––––––––––––––––-*//
this.label12.Location = new System.Drawing.Point(488, 16);
this.label12.Name = "label12";
this.label12.Size = new System.Drawing.Size(72, 23);
this.label12.TabIndex = 20;
this.label12.Text = "Description:";
//*––––––––––––––––––––––––––––––––––––*//
this.TBRName.Location = new System.Drawing.Point(96, 24);
this.TBRName.Name = "TBRName";
this.TBRName.Size = new System.Drawing.Size(176, 20);
this.TBRName.TabIndex = 7;
this.TBRName.Text = "";
//*––––––––––––––- ––––––––––––––––––––-*//
this.label13.Location = new System.Drawing.Point(16, 24);
this.label13.Name = "label13";
this.label13.Size = new System.Drawing.Size(72, 23);
this.label13.TabIndex = 6;
this.label13.Text = "Name:";
//*–––––––––––––––––––––––––––––––––––*//
this.TBRDesc.Location = new System.Drawing.Point(96, 56);
this.TBRDesc.Multiline = true;
this.TBRDesc.Name = "TBRDesc";
this.TBRDesc.Size = new System.Drawing.Size(176, 80);
this.TBRDesc.TabIndex = 23;
this.TBRDesc.Text = "";
// ………………………………………………………………………………………………………………… //
this.label14.Location = new System.Drawing.Point(16, 80);
this.label14.Name = "label14";
this.label14.Size = new System.Drawing.Size(72, 23);
this.label14.TabIndex = 22;
this.label14.Text = "Description:";
};
Anexa nr.2. Structura bazei de date “Evidenta tehnicii de calcul”.
Figura 2. Structura bazei de date “Evidenta tehnicii de calcul”.
Anexa nr.3 Forma pentru introducerea datelor in tabelul “Users”.
Figura 3. Forma pentru introducerea datelor în forma users.
Anexa nr.4. Forma pentru introducerea datelor in tabelul “ Rooms”.
Figura 4. Forma pentru introducerea datelor in tabelul rooms.
Anexa nr.5. Forma în care se introduc datele despre tehnica de calcul.
Figura 5. Forma în care se introduc date despre tehnica de calcul.
Anexa nr.6. Graful-rețea pentru elaborarea BD “Evidenta tehnicii de calcul”.
Schema 1. Graful-rețea pentru elaborarea BD “Evidenta tehnicii de calcul”.
Continuarea schemei 1. Graful-rețea pentru elaborarea BD “Evidenta tehnicii de calcul”.
Anexa nr.7. Evaluarea eficienții sociale de la implementarea BD “Evidenta tehnicii de calcul”.
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Elaborarea Si Gestionarea Bazei de Date Evidenta Tehnicii de Calcul la O Banca (ID: 148793)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
