database tull
Transcript of database tull
![Page 1: database tull](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/1.jpg)
DatabaserUMB 23/09 2013
Per Bisseberg
![Page 2: database tull](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/2.jpg)
Databasestruktur
Atomære verdier
Verdinødvendighet
Unikhet
Sorterte data
Pekere
Kobling av datasett
![Page 3: database tull](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/3.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/4.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/5.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/6.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/7.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/8.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/9.jpg)
Integritetsregler
entitetsintegritet
referanseintegritet
![Page 10: database tull](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/10.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/11.jpg)
Referanseintegritet
Fremmednøkkel(FK)◦ Hvis to tabeller er sammensatt i et Primærnøkkel - Fremmednøkkel-forhold, må alle verdier av fremmednø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](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/12.jpg)
CREATE TABLE
![Page 13: database tull](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/13.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/14.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/15.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/16.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/17.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/18.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/19.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/20.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/21.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/22.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/23.jpg)
Aggregering
![Page 24: database tull](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/24.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/25.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/26.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/27.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/28.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/29.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/30.jpg)
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](https://reader033.fdocuments.net/reader033/viewer/2022052413/55a0b0741a28ab23078b4838/html5/thumbnails/31.jpg)
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);