database tull
Embed Size (px)
TRANSCRIPT
Databaser 1/10 2012
DatabaserUMB 23/09 2013Per BissebergDatabasestrukturAtomre verdierVerdindvendighetUnikhetSorterte dataPekereKobling av datasettAtomre verdierSammensatt
Repeterende
Sammensatt og repeterende
AvdkodeAvdnavnEtasje_og_areal1Ost3 / 100AvdkodeAvdnavnEtasjenrAreal17Administrasjon 3, 5 600AvdkodeAvdnavnEtasje_og_areal17Administrasjon 3/400, 5 /200 VerdindvendighetEr det ndvendig fylle ut alle verdier?
NOT NULLavdkodeavdnavnetasjenrareal3Sko42Kjkken57900Unikhet
Ingen krav, verdiene kan vre likeUnik, men kan inneholde for mange kolonnerVerdiene m vre forskjellige (unike)En utvalgt blant evt. flere kol. Som er unike
KandidatnkkelPrimrnkkelSupernkkelSortering og pekereVi vil ikke ha sorterte dataVi vil kunne sortere data uavhengig av databasestrukturDataene er uansett det samme om de er sortert eller ikke
Relasjonsdatabaser benytter ikke pekere
Kobling av datasettFremmednkkel(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 Primrnkkel(PK) i det tilkoblete datasett.Kobling av datasettAnsattnrFnavnEnavnAdresseTelefonnrAvdkode*Lnn1000AndersAndersenAveien 11234567832500001001BerntBertsenBveien 12345678901002CesarCesarsenCveien 134567890113000001003DavidDavidsenDveien 145678901214000009834EdgarEdgarsenEveien 156789012314250000AvdkodeAvdnavnEtasjenrAreal1Ost410014Hvite potteplanter510003Sko42Kjkken579005Rde potteplanter150Integritetsreglerentitetsintegritetreferanseintegritet
EntitetsintegritetPrimrnkkel(PK)Krav:Not NULLalle verdier av det valgte kolonne/kombinasjon m vre unik.ingen del av felt/kombinasjon kan vre NULL.
Forml: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".
Referanseintegritet
Fremmednkkel(FK)Hvis to tabeller er sammensatt i et Primrnkkel - Fremmednkkel-forhold, m alle verdier av fremmednkkelenenten: "matche med" en verdi i primrnkkeleneller: helt ut vre NULL (udefinert, finnes ikke)
NB! Gjelder ogs sammensatt PrimrnkkelCREATE TABLESammensatt PrimrnkkelCREATE TABLE kunde (landskode varchar(2) not null,kundenr integer not null,kundenavn varchar(20) not null, kundeadresse varchar(50),PRIMARY KEY (landskode,kundenr));
Fremmednkkel - 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));
Fremmednkkeldelen til slutt (ndvendig 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));
Fremmednkkeldelen 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);
Metoder for sikring av referanseintegritetON DELETEON UPDATESET NULLCASCADE
Syntax eksALTER TABLE ordreADD CONSTRAINT kunde_fkFOREIGN KEY (kundenr)REFERENCES kunde (kundenr)ON DELETE CASCADE;
ON DELETEUtfres nr den refererte verdi slettes.CASCADE vil slette den refererende radSET NULL vil sette en null verdi i refererende attributtA_idA_verdi10110000010250000TABELL ATABELL BB_idB_verdiA_id*B125101B212102ON DELETE CASCADEA_idA_verdi101 SLETTES10000010250000TABELL ATABELL BB_idB_verdiA_idB212102ON DELETE SET NULLA_idA_verdi101 SLETTES10000010250000TABELL ATABELL BB_idB_verdiA_idB125NULLB212102ON UPDATE CASCADEA_idA_verdi101 ny verdi = 100110000010250000TABELL ATABELL BB_idB_verdiA_idB1251001B212102ON UPDATE SET NULLA_idA_verdi101 ny verdi = 100110000010250000TABELL ATABELL BB_idB_verdiA_idB125NULLB212102AggregeringAggregeringsfunksjonerSQL 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 settetAggregeringsfunksjonerSELECT COUNT(*) FROM kunde;Returnerer antall rader i kunde entitetenSELECT AVG(omsetning) FROM kunde WHERE omsetning > 2000000;Returnerer gjennomsnitt av omsetning for kunder med omsetning over 2000000SELECT MAX(omsetning) FROM kunde;Returnerer hyeste omsetning i kunde entiteten.
GrupperingOm 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 hjemstedskommuneneALL/ANYALL og ANY brukes p resultatet av en delsprring.
ALL er sann hvis alle i delsprringen oppfyller kriteriet. Usant hvis delsprringen er tom.
ANY er sann hvis noen (en eller flere) oppfyller kravet. Sant hvis delsprringen er tom. SOME er ekvivalent med ANY.
ALL/ANYSELECT * FROM kundeWHERE kundenr >= ALL (SELECT kundenr FROM kunde);
er det samme som
Select * FROM kundeWHERE kundenr >= (SELECT MAX(kundenr) FROM kunde);
ALL/ANYSELECT * FROM kundeWHERE kundenr (SELECT MIN(kundenr) FROM kunde);
ALL/ANYLitt vanskeligere sprringer, men her ser vi virkelig nytten av ALL/ANYSELECT gruppekode FROM kunde GROUP BY gruppekodeHAVING AVG(omsetning)>=ALL (SELECT AVG(omsetning)FROM kundeGROUP BY gruppekode);