4. Verdinødvendighet
Er det nødvendig å fylle ut alle verdier?
◦ NOT NULL
avdkode avdnavn etasjenr areal
3 Sko 4
2 Kjøkken 57 900
5. 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
6. 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
7. 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.
10. 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".
11. 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
15. 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)
);
16. 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 ordre
ADD CONSTRAINT kunde_fk
FOREIGN KEY (kundenr)
REFERENCES kunde (kundenr);
17. Metoder for sikring av
referanseintegritet
ON DELETE
ON UPDATE
◦ SET NULL
◦ CASCADE
Syntax eks
◦ ALTER TABLE ordre
ADD CONSTRAINT kunde_fk
FOREIGN KEY (kundenr)
REFERENCES kunde (kundenr)
◦ ON DELETE CASCADE;
18. 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
19. 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
20. 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
21. 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
22. 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
24. Aggregeringsfunksjoner
SQL kan også brukes til å telle opp
(count), summere (sum), finne
maksimum og minimum (max, min),
gjennomsnitt (avg) m.m.
Vi kan benytte aggregeringsfunksjoner på
hele datasett eller på grupper av data i
settet
25. Aggregeringsfunksjoner
SELECT COUNT(*) FROM kunde;
◦ Returnerer antall rader i kunde entiteten
SELECT AVG(omsetning) FROM kunde
WHERE omsetning > 2000000;
◦ Returnerer gjennomsnitt av omsetning for
kunder med omsetning over 2000000
SELECT MAX(omsetning) FROM kunde;
◦ Returnerer høyeste omsetning i kunde
entiteten.
26. 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 STUDENT
GROUP BY hjemsteds_kommune;
◦ Returnerer antall studenter representert fra de
individuelle hjemstedskommunene
27. 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.
28. ALL/ANY
SELECT * FROM kunde
WHERE kundenr >= ALL (SELECT kundenr
FROM kunde);
er det samme som
Select * FROM kunde
WHERE kundenr >= (SELECT
MAX(kundenr) FROM kunde);
29. ALL/ANY
SELECT * FROM kunde
WHERE kundenr <= ALL (SELECT kundenr
FROM kunde);
er det samme som
SELECT * FROM kunde
WHERE kundenr <= (select min(kundenr)
FROM kunde);
30. ALL/ANY
SELECT * FROM kunde
WHERE kundenr > ANY (SELECT kundenr
FROM kunde);
er det samme som
SELECT * FROM kunde WHERE kundenr >
(SELECT MIN(kundenr) FROM kunde);
31. ALL/ANY
Litt vanskeligere spørringer, men her ser
vi virkelig nytten av ALL/ANY
SELECT gruppekode FROM kunde
GROUP BY gruppekode
HAVING AVG(omsetning)
>=
ALL (SELECT AVG(omsetning)
FROM kunde
GROUP BY gruppekode);