Documente Academic
Documente Profesional
Documente Cultură
un fiier cu extensia .mdf zero sau mai multe fiiere cu extensia .ndf i unul cu extensia .ldf n fiierul cu extensia .mdf sunt stocate obiectele bazei de date precum tabelele, indexii, vederile etc. mpreun cu definiiile lor, fiierele cu extensia .ndf sunt fiiere secundare ce conin numai date, iar fiierul cu extensia .ldf conine jurnalul de tranzacii. Orice baz de date are asociat un jurnal de tranzacii. Actualizarea unei nregistrri a bazei de date presupune memorarea n jurnalul de tranzacii a coninutului nregistrrii dinainte i dup actualizare. Jurnalul de tranzacii este folosit pentru restaurarea bazei de date n situaia n care apare o eroare ce necesit anularea sau reluarea unor operaii nregistrate. Pentru crearea unei baze de date se folosete comanda Create database care n form simplificat se prezint conform urmtoarelor exemple:
1) 2)
CREATE DATABASE dbStudenti CREATE DATABASE dbStudenti ON ( NAME = dbStd, FILENAME = 'L:\DB\Studenti.mdf' )
3)
CREATE DATABASE dbStudenti ON ( NAME = dbStd, FILENAME = 'L:\DB\Studenti.mdf' ) LOG ON ( NAME = dbStd_log, FILENAME = 'L:\DB\Studenti.ldf' )
4)
CREATE DATABASE dbMultiFisier ON PRIMARY ( NAME = F1, FILENAME = 'L:\db\Fisier1.mdf', SIZE = 2MB, MAXSIZE = 10MB, FILEGROWTH = 10%), ( NAME = F2, FILENAME = 'L:\db\Fisier2.ndf', SIZE = 1MB, MAXSIZE = 10MB, FILEGROWTH = 10%), ( NAME = F3,
FILENAME = 'L:\db\Fisier3.ndf', SIZE = 1MB, MAXSIZE = 10MB, FILEGROWTH = 10%) LOG ON ( NAME = F_Log1, FILENAME = 'L:\DB\Fisier_Log1.ldf', SIZE = 512KB, MAXSIZE = 10MB, FILEGROWTH = 10%), ( NAME = F_Log2, FILENAME = 'L:\db\Fisier_Log2.ldf', SIZE = 512KB, MAXSIZE = 10MB, FILEGROWTH = 10%)
In exemplul 1) baza de date dbStudenti va fi creat n folderul implicit C:\Program Files\Microsoft SQL Server\MSSQL\Data, precizat n timpul instalrii sistemului SQL Server In exemplele 2), 3) i 4) baza de date va fi creat n folderul DB al unitii L (care poate fi, de exemplu, un stick usb) ON semnific utilizarea unui grup de fiiere NAME -furnizeaz numele logic al fiierului datelor, respectiv al jurnalului FILENAME -furnizeaz numele fizic al fiierului datelor, respectiv al jurnalului SIZE parametru opional, specific dimensiunea iniial a fiierului msurat n KB, MB sau GB, valoare implicit 1MB pentru fiierul de date i 512KB pentru fiierul jurnal. Unitatea de msur implicit este MB. MAXSIZE -parametru opional, specific dimensiunea maxim la care poate ajunge fiierul. Dac se specific MAXSIZE sau i se atribuie UNLIMITED atunci fiierul crete ct i permite spaiul liber de pe disc FILEGROWTH parametru opional, precizeaz pasul cu care crete dimensiunea fiierului, n valoare absolut sau n procente raportat la fiierul asociat. Valoarea implicit este de 256KB cu valoarea minim 64KB. Valoarea 0 impiedic creterea fiierului. TERGEREA BAZELOR DE DATE Sintaxa:
DROP DATABASE denumire_baz_date
In SQL Server 2008 a fost introdus backup-ul compresat. Acesta se realizeaza cu comanda BACKUP la care se adauga clauza WITH COMPRESSION. 2
Exemplu:
BACKUP DATABASE dbStudeti TO DISK='g:\dbSalvari\dbStudenti.bak' WITH COMPRESSION
INSTALAREA BAZELOR DE DATE Procedura de sistem sp_attach_db este folosit pentru a face o baz de date portabil, accesibil de pe un server nou. Astfel, dac o baz de date este stocat pe un support amovibil(nu neaprat), ea poate fi instalat printr-un appel de forma
sp_attach_db dbStd, 'L:\DB\Studenti.mdf' Numele bazei de date nu este necesar s coincid cu cel iniial
Instalarea unei baze de date se poate face i cu ajutorul comenzii create database cu folosirea clauzei for attach ca mai jos:
create database dbStd on (filename='L:\db\Studenti.mdf') for attach
DEZINSTALAREA BAZELOR DE DATE Procedura de sistem sp_detach_db este folosit pentru dezinstalarea bazelor de date prin apeluri de forma:
sp_detach_db dbStd Observaie
SQL Server Management Studio ofera faciliti grafice pentru instalarea i dezinstalarea bazelor de date
-214,748.3648 pn la +214,748.3647. Obs. Toate tipurile numerice de date cu excepia money i smallmoney sunt convertite implicit din iruri de caractere n timpul executrii instruciunilor Insert i Update. De exemplu
insert into tabelTest(c1) values('45')
va genera un mesaj de eroare dac c1 este de tip money si va funciona corect pentru orice alt tip numeric Pentru rezolvarea problemei, putem face o transformare explicit astfel:
insert into tabelTest(c1) values(cast('45' as money))
va stoca o valoare aproximativ daca c1 este de tip real, dup cum se observa i din rezultatul furnizat de urmtoarea fraz select:
select c, cast(c as bigint) from t1
1.234568E+11 123456790528
Crearea tabelelor
Comanda CREATE TABLE permite crearea unei noi tabele. Sintaxa sa este urmtoarea: CREATE TABLE denumire_tabel ( denumire_coloan1 tip_de_dat [ constrngere_la_nivel_de_coloan] [, denumire_coloan2 tip_de_dat [ constrngere_la_nivel_de_coloan] ] [, constrngere1_la_nivel_de_rand] [, constrngere2_la_nivel_de_rand ] ) O constrngere este un mecanism care ne asigur c valorile unei coloane sau ale unei mulimi de coloane satisfac o condiie dat. Dac nu se specific un nume explicit pentru constrngere atunci sistemul i atribuie unul nume. Constrngeri la nivel de coloan Sintaxa [Constraint denumire_constrngere] constrngere1 [constrangere2 ] Constrngerea NULL Specific faptul c sunt permise valori Null pentru coloana respectiv. Constrngerea NULL este implicit. Exemplu:
Telefon char(10) NULL
Constrngerea NOT NULL Specific faptul c sunt interzise valorile Null pentru coloana respectiv Exemplu:
Nume char(30) NOT NULL
Constrngerea DEFAULT Specific o valoare implicit care este atribuit cnd nu se specific o valoare explicit pentru coloana respectiv Sintaxa: DEFAULT expresie_constanta Exemple:
Data SmallDateTime default getdate(), CodJudet char(2) default 'AG', Cantitate numeric(8,3) default 0
Constrngerea IDENTITY
Indic o coloan pentru care SQL Server genereaz n mod automat valori incremental, unice la nivel de tabel Exemplu
id_detaliu id bigint int identity(101,1) identity
Primul parametru reprezint valoarea atribuit primei tuple, iar al doilea parametru reprezint valoarea de incrementare. Parametrii pot lipsi, ei au valoarea implicit 1. Constrngerea PRIMARY KEY Impune valori unice i nenule pentru coloana n cauz, coloana reprezint cheia primar a tabelei Exemplu:
CodFurnizor char(10) primary key
Constrngerea UNIQUE Impune valori unice pentru coloana n cauz, coloana reprezint o cheie candidat a tabelei Exemple:
marca int unique CNP char(13) constraint ix_cnp unique
Constrngerile PRIMARY KEY i UNIQUE genereaz implicit chei de indexare. Un index poate fi de tip CLUSTERED, caz n care ordinea fizic a rndurilor tabelei coincide cu ordinea logic(tabela este sortat dup cheia indexului clustered), sau NONCLUSTERED. Evident c o singur cheie poate fi de tip clustered. Opiunea implicit pentru PRIMARY KEY est CLUSTERED, iar pentru UNIQUE este NONCLUSTERED, dar pot fi schimbate ca in exemplul urmtor:
marca int primary key nonclustered, CNP char(13)constraint ix_cnp unique clustered
Constrngerea FOREIGN KEY Constrngerea Foreign key se folosete uzual mpreun cu Primary key pentru a rezolva problema integritii refereniale. Sintaxa:
[FOREIGN KEY] REFERENCES tabela_referit(coloana_referit) [ON DELETE {CASCADE | NO ACTION}] [ON UPDATE {CASCADE | NO ACTION}]
Coloana_referit trebuie s fie definit ca Primary key sau Unique. ON DELETE CASCADE menine integritatea referenial n cazul tergerii unui rnd din tabela_referit (care conine cheia primar sau unic), prin tergerea tuturor rndurilor ce conin cheii strine dependente. Valoarea implicit este ON DELETE NO ACTION. ON UPDATE CASCADE -menine integritatea referenial n cazul modificrii valorii coloanei referite din tabela asociat (care conine cheia primar sau unic), prin propagarea modificrii tuturor rndurilor ce conin cheia strin dependent. 8
Valoarea implicit este ON UPDATE NO ACTION. Constrngerea CHECK Definete o restricie de domeniu pecare trebuie s o satisfac datele din coloana respectiv Sintaxa:
CHECK (expresie_logic) Salariu int CHECK (Salariu >= 600 AND Salariu <= 8000) Nota INT CHECK (Nota BETWEEN 1 AND 10) DenumireZi char(10) check(DenumireZi in (luni, marti, miercuri))
Observatie: Coloanele supuse unor reguli check pot primi valoarea null dac nu se impune constrngerea not null.