database tull

31
Databaser UMB 23/09 2013 Per Bisseberg

Upload: perolavb

Post on 11-Jul-2015

52 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: database tull

DatabaserUMB 23/09 2013

Per Bisseberg

Page 2: database tull

Databasestruktur

Atomære verdier

Verdinødvendighet

Unikhet

Sorterte data

Pekere

Kobling av datasett

Page 3: database tull

Atomære verdier

Sammensatt

Repeterende

Sammensatt og repeterende

Avdkode Avdnavn Etasje_og_areal1 Ost 3 / 100

Avdkode Avdnavn Etasjenr Areal17 Administrasjon 3, 5 600

Avdkode Avdnavn Etasje_og_areal17 Administrasjon 3/400, 5 /200

Page 4: database tull

Verdinødvendighet

Er det nødvendig å fylle ut alle verdier?

◦ NOT NULL

avdkode avdnavn etasjenr areal3 Sko 42 Kjøkken 57 900

Page 5: database tull

Unikhet

Ingen krav, verdiene kan være like

Unik, men kan inneholde “for mange kolonner”

Verdiene må være forskjellige (unike)

En utvalgt blant evt. flere kol. Som er unike

Kandidatnøkkel

Primærnøkkel

Supernøkkel

Page 6: database tull

Sortering og pekere

Vi vil ikke ha sorterte data◦ Vi vil kunne sortere data uavhengig av databasestruktur

◦ Dataene er uansett det samme om de er sortert eller ikke

Relasjonsdatabaser benytter ikke pekere

Page 7: database tull

Kobling av datasett

Fremmednøkkel(FK)◦ FK benyttes til å peke til et element i et annet datasett ved sammenkobling av flere sett med data.

◦ FK skjer på identisk/lik verdi i form av en Primærnøkkel(PK) i det tilkoblete datasett.

Page 8: database tull

Kobling av datasett

Ansattnr Fnavn Enavn Adresse Telefonnr Avdkode* Lønn1000 Anders Andersen Aveien 1 12345678 3 2500001001 Bernt Bertsen Bveien 1 2345678901002 Cesar Cesarsen Cveien 1 345678901 1 3000001003 David Davidsen Dveien 1 456789012 1 4000009834 Edgar Edgarsen Eveien 1 567890123 14 250000

Avdkode Avdnavn Etasjenr Areal1 Ost 4 10014 Hvite potteplanter 5 1000

3 Sko 42 Kjøkken 57 9005 Røde potteplanter 1 50

Page 9: database tull

Integritetsregler

entitetsintegritet

referanseintegritet

Page 10: database tull

Entitetsintegritet

Primærnøkkel(PK)◦ Krav: Not NULL

alle verdier av det valgte kolonne/kombinasjon må være unik.

ingen del av felt/kombinasjon kan være NULL.

◦ Formål: alle forekomster (entiteter = "ting") skal kunne

identifiseres og ha mening.

Hvis ansattnr brukes for å identifisere, vil vi ikke tillate like ansattnr, heller ikke at ansattnr er "ukjent".

Page 11: database tull

Referanseintegritet

Fremmednøkkel(FK)◦ Hvis to tabeller er sammensatt i et Primærnøkkel - Fremmednøkkel-forhold, må alle verdier av fremmed­nøkkelen

◦ enten: "matche med" en verdi i primærnøkkelen

◦ eller: helt ut være NULL (udefinert, finnes ikke)

◦ NB! Gjelder også sammensatt Primærnøkkel

Page 12: database tull

CREATE TABLE

Page 13: database tull

Sammensatt Primærnøkkel

CREATE TABLE kunde (landskode varchar(2) not null,kundenr integer not null,kundenavn varchar(20) not null, kundeadresse varchar(50),PRIMARY KEY (landskode,kundenr)

);

Page 14: database tull

Fremmednøkkel - Enklest mulig(anbefales ikke):

CREATE TABLE ordre (ordrenr integer not null,ordredato date,kundenr integer not null FOREIGN KEY

REFERENCES kunde(kundenr),kontaktperson varchar(30),PRIMARY KEY (ordrenr)

);

Page 15: database tull

Fremmednøkkeldelen til slutt (nødvendig ved sammensatt PK):

CREATE TABLE ordre (ordrenr int not null,ordredato date,kundenr int not null,landskode varchar(2),kontaktperson varchar(30),PRIMARY KEY (ordrenr, kundenr),FOREIGN KEY (landskode, kundenr) REFERENCES kunde(landskode,kundenr)

);

Page 16: database tull

Fremmednøkkeldelen som egen setning (anbefales)

CREATE TABLE ordre (ordrenr int not null,ordredato date,kundenr int not null,kontaktperson varchar(30),primary key (ordrenr)

);

ALTER TABLE ordreADD CONSTRAINT kunde_fkFOREIGN KEY (kundenr)REFERENCES kunde (kundenr);

Page 17: database tull

Metoder for sikring av referanseintegritet

ON DELETE ON UPDATE

◦ SET NULL

◦ CASCADE

Syntax eks◦ ALTER TABLE ordre

ADD CONSTRAINT kunde_fkFOREIGN KEY (kundenr)REFERENCES kunde (kundenr)

◦ ON DELETE CASCADE;

Page 18: database tull

ON DELETE

Utføres når den refererte verdi slettes.◦ CASCADE vil slette den refererende rad

◦ SET NULL vil sette en null verdi i refererende attributt

A_id A_verdi

101 100000

102 50000

TABELL A TABELL B

B_id B_verdi A_id*

B1 25 101

B2 12 102

Page 19: database tull

ON DELETE CASCADE

A_id A_verdi

101 SLETTES 100000

102 50000

TABELL A

TABELL B

B_id B_verdi A_id

B2 12 102

Page 20: database tull

ON DELETE SET NULL

A_id A_verdi

101 SLETTES 100000

102 50000

TABELL A

TABELL B

B_id B_verdi A_id

B1 25 NULL

B2 12 102

Page 21: database tull

ON UPDATE CASCADE

A_id A_verdi

101 ny verdi = 1001 100000

102 50000

TABELL A

TABELL B

B_id B_verdi A_id

B1 25 1001

B2 12 102

Page 22: database tull

ON UPDATE SET NULL

A_id A_verdi

101 ny verdi = 1001 100000

102 50000

TABELL A

TABELL B

B_id B_verdi A_id

B1 25 NULL

B2 12 102

Page 23: database tull

Aggregering

Page 24: database tull

Aggregeringsfunksjoner

SQL kan også brukes til å telle opp(count), summere (sum), finnemaksimum og minimum (max, min), gjennomsnitt (avg) m.m.

Vi kan benytte aggregeringsfunksjoner på hele datasett eller på grupper av data i settet

Page 25: database tull

Aggregeringsfunksjoner

SELECT COUNT(*) FROM kunde;◦ Returnerer antall rader i kunde entiteten

SELECT AVG(omsetning) FROM kundeWHERE omsetning > 2000000;◦ Returnerer gjennomsnitt av omsetning for kunder med omsetning over 2000000

SELECT MAX(omsetning) FROM kunde;◦ Returnerer høyeste omsetning i kunde entiteten.

Page 26: database tull

Gruppering

Om vi vil begrense datasettet til et mindre utvalg kan vi gruppere.

SELECT gruppekode, SUM(omsetning) FROM kunde GROUP BY gruppekode;◦ Returnerer summen av total omsetning for de

individuelle gruppekodene

SELECT COUNT(*) FROM STUDENTGROUP BY hjemsteds_kommune;◦ Returnerer antall studenter representert fra de

individuelle hjemstedskommunene

Page 27: database tull

ALL/ANY

ALL og ANY brukes på resultatet av en delspørring.

◦ ALL er sann hvis alle i delspørringen oppfyller kriteriet. Usant hvis delspørringen er tom.

◦ ANY er sann hvis noen (en eller flere) oppfyller kravet. Sant hvis delspørringen er tom. SOME er ekvivalent med ANY.

Page 28: database tull

ALL/ANY

SELECT * FROM kundeWHERE kundenr >= ALL (SELECT kundenrFROM kunde);

er det samme som

Select * FROM kundeWHERE kundenr >= (SELECT MAX(kundenr) FROM kunde);

Page 29: database tull

ALL/ANY

SELECT * FROM kundeWHERE kundenr <= ALL (SELECT kundenrFROM kunde);

er det samme som

SELECT * FROM kundeWHERE kundenr <= (select min(kundenr) FROM kunde);

Page 30: database tull

ALL/ANY

SELECT * FROM kundeWHERE kundenr > ANY (SELECT kundenrFROM kunde);

er det samme som

SELECT * FROM kunde WHERE kundenr > (SELECT MIN(kundenr) FROM kunde);

Page 31: database tull

ALL/ANY

Litt vanskeligere spørringer, men her ser vi virkelig nytten av ALL/ANY

SELECT gruppekode FROM kundeGROUP BY gruppekodeHAVING AVG(omsetning)>=ALL (SELECT AVG(omsetning)FROM kundeGROUP BY gruppekode);