100 likes | 264 Views
Fødselsdato (dmå). er født. har lønn. Ansatt (ansnr). Beløp (NKr)+. Telefon (tlfnr). har. har betalt skatt. Fødselsdato (dmå). er født. har lønn. Ansatt (ansnr). Beløp (NKr)+. Telefon (tlfnr). har. har betalt skatt. Eksempel på relasjonsskjema.
E N D
Fødselsdato (dmå) er født har lønn Ansatt (ansnr) Beløp (NKr)+ Telefon (tlfnr) har har betalt skatt Fødselsdato (dmå) er født har lønn Ansatt (ansnr) Beløp (NKr)+ Telefon (tlfnr) har har betalt skatt
Eksempel på relasjonsskjema Ansatt ( ansnr , fdato, lønn, [skatt] ) Telefon ( ansnr , tlfnr ) *Nettolønn ( ansnr , netto ) ::= ansnr , lønn - skatt from Ansatt
create table Ansatt ( ansnr integer primary key, fdato date not null check ( fdato between ’1920-01-01’ and CURRENT_DATE ), lønn decimal(9,2) not null, skatt decimal(9,2) ) create table Telefon ( ansnr integer references Ansatt, tlfnr char(15) not null, primary key (ansnr , tlfnr)) create view Nettolønn (ansattnr, netto) as select ansattnr, lønn - skatt from Ansatt
Operatorer på sett/mengder For å : Union A B - slå sammen 2 mengder Snitt A B - finne felles undermengde Differanse A - B - finne unik undermengde i A • Krever at A og B er union-kompatible : • like mange kolonner • korresponderende domener Hva representerer mengdene A og B ? Kartesisk produkt (cross join) A x B For å generere alle parkombinasjoner av elementene fra A og B
Operatorer på tabeller Seleksjon T where c Utvalg av rader som tilfredsstiller c Projeksjon T[ a,b,...]Utvalg av kolonnene a,b,... med repeterte rader fjernet. Join A x B where A.a B.b Kombinere kolonner fra forskjellige tabeller ved sammenligning av kolonnene a og b. Natural join A B Sammenligner med = på kolonne med felles navn (og domene). Assosiativ Divisjon A B Finner hvilke rader i A er assosiert med alle rader i B
Structured Query Language • Definere datastruktur • Implementere relasjonsskjema • Tabellskjema • Beskrankninger • Utledninger • Spørre etter informasjon i databasen • Oppdatere og vedlikeholde database • For relasjonelle databaser • Deklarativt, ikke prosedyre språk • Forskjellige versjoner av standard
Relasjonsalgebra vs SQL T[a,b,...] select distinct a,b,... from T T where c select * from T where c T[a,b,...] where c select distinct a,b,... from T where c select a,b,... from T where c AxB where A.aB.b select * from A join B where A.aB.b A B select * from A natural join B Union select ... union select ... Snitt select ... intersect select ... Differanse select ... except select ...
Join R1: A a1 a2 a3 a3 B b1 b1 b2 b4 R2 : B b1 b2 b2 b3 C c1 c2 c3 c4 R1 join R2 : A a1 a2 a3 a3 a4 ? B b1 b1 b2 b2 b4 b3 C c1 c1 c2 c3 ? b4 1 2 3 Inner join select * from R1 natural join R2 select * from R1 natural left join R2 select * from R1 natural right join R2 select * from R1 natural full join R2 1 1+2 1+3 1+2+3 Outer join
Beskrankninger Entydighet primary key unique Totale roller not null references Andre check ( betingelse ) i noen tilfeller : spesialdesignet kode
Rmap prosedyre Prioritering : Korrekthet, klarhet, effektivitet • Mål : • Unngå redundans. • Minimalisere antall tabeller • 2 hovedsteg : • Faktatyper med sammensatt entydighetsbeskrankninger mappes til egne tabeller. • Faktatyper med funkjsonelle roller tilknyttet samme entitetstype, grupperes inn i samme tabell, med entitetstypen sin identifikator som nøkkel.