En til en og rekursive sammenhenger Self-reflection is the school of wisdom Baltastar Gracián
Et organisasjonskart
Modellering av et 1:1 forhold AVDELING ANSATT *avdnavn *ansattnr avdetasje ansattnavn avdtlf ansattlonn Avdelingsleder 1:1 sammenhengen er merket med navn Sammenhengsbeskrivelse Selvsagte sammenhenger merkes ikke med navn
Modellering av en rekursiv sammneheng En rekursiv sammenheng binder sammen en entitet med seg selv Rekursive sammenhenger skal merkes AVDELING ANSATT *avdelingsnavn *ansattnr avdelingsetasje ansattfnavn avdelingstlf ansattlonn avdelingsleder overordnet
Mapping av en 1:1 sammenheng De vanlige reglene gjelder Hvor plasserer du fremmednøkkelen? AVDELING? ANSATT? BEGGE TABELLER? regel: Plasser fremmednøkkelen slik at det blir færrest mulig NULL - her avdeling
Mapping av rekursive sammenhenger Vanlige regler 1:m Entiteten får en ekstra kolonne for fremmednøkkelen Må ha eget navn forskjellig fra primærnøkkel
Fremmednøkkel avdelingsleder Resultater av mapping Fremmednøkkel avdelingsleder AVDELINGS AVDELINGSNAVN AVDELINGS- ETASJE AVDELINGSTLF ANSATT- NR Management 5 2001 1 Marketing 2002 2 Accounting 4 2003 Purchasing 2004 7 Personnel & PR 2005 9 ANSATT ANSATT- NR ANSATT- FNAVN ANSATT- LONN AVDELINGS- NAVN OVER- ORDNET- NR 1 Alice 75000 Management 2 Ned 45000 Marketing 3 Andrew 25000 4 Clare 22000 5 Todd 38000 Accounting 6 Nancy 7 Brier 43000 Purchasing 8 Sarah 56000 9 Sophie 35000 Personnel & PR
Hvorfor mangler referanseintegritet for OVERORDNET? Å lage tabellene CREATE TABLE AVDELING ( AVDELINGSNAVN VARCHAR(15), AVDELINGSETASJE SMALLINT NOT NULL, AVDELINGSTLF SMALLINT NOT NULL, ANSATTNR SMALLINT NOT NULL, PRIMARY KEY(AVDELINGSNAVN) ); CREATE TABLE ANSATT ( ANSATTNR SMALLINT, ANSATTFNAVN VARCHAR(10), ANSATTLONN DECIMAL(7,0), AVDELINGSNAVN VARCHAR(15), OVERORDNET SMALLINT, PRIMARY KEY(ANSATTNR), CONSTRAINT FK_EMP_AVDELINGS FOREIGN KEY(AVDELINGSNAVN) REFERENCES AVDELING Hvorfor mangler referanseintegritet for OVERORDNET?
Spørring i et 1:1 forhold List lønna for hver avdelingsleder. SELECT ANSATTFNAVN, AVDELINGSNAVN, ANSATTLONN FROM ANSATT WHERE ANSATTNR IN (SELECT ANSATTNR FROM AVDELING); ANSATTFNAVN AVDELINGSNAVN ANSATTLONN Alice Management 75000 Ned Marketing 45000 Todd Accounting 38000 Brier Purchasing 43000 Sophie Personnel & PR 35000
Spørring fra en rekursiv sammenheng Finn lønna til Nancys sjef. SELECT UNDERORDNET.ANSATTFNAVN, UNDERORDNET.ANSATTLONN, OVERORDNET.ANSATTFNAVN, OVERORDNET.ANSATTLONN FROM ANSATT UNDERORDNET, ANSATT OVERORDNET WHERE UNDERORDNET.ANSATTFNAVN = 'NANCY' AND UNDERORDNET.OVERORDNETNR = OVERORDNET.ANSATTNR; UNDERORDNET.ANSATTFNAVN UNDERORDNET. ANSATTLONN OVERORDNET. ANSATTFNAVN OVERORDNET. ANSATTLONN Nancy 22000 Todd 38000
Å joine en tabell med seg selv ANSATT ANSATTN R ANSATT FNAVN ANSATTLONN AVDELINGSNAVN OVERORD NETNR 1 Alice 75000 Management 2 Ned 45000 Marketing 3 Andrew 25000 4 Clare 22000 5 Todd 38000 Accounting 6 Nancy 7 Brier 43000 Purchasing 8 Sarah 56000 9 Sophie 35000 Personnel & PR UNDERORDNET ANSATT ANSATT NR ANSATT FNAVN ANSATTLONN AVDELINGSNAVN OVERORD NETNR 1 Alice 75000 Management 2 Ned 45000 Marketing 3 Andrew 25000 4 Clare 22000 5 Todd 38000 Accounting 6 Nancy 7 Brier 43000 Purchasing 8 Sarah 56000 9 Sophie 35000 Personnel & PR OVERORDNET
Spørring fra en rekursiv sammenheng Finn navnene til ansatte som tjener mer enn sine overordnede SELECT UNDERORDNET.ANSATTFNAVN FROM ANSATT UNDERORDNET, ANSATT OVERORDNET WHERE UNDERORDNET.OVERORDNETNO = OVERORDNET.ANSATTNR AND UNDERORDNET.ANSATTLONN > OVERORDNET.ANSATTLONN; underordnet overordnet ansattnr ansatt fnavn ansattlonn avdelingsnavn overordn etno ansattfn avn overordne tno 2 Ned 45,000 Marketing 1 Alice 75,000 Management 3 Andrew 25,000 4 Clare 22,000 5 Todd 38,000 Accounting 6 Nancy 7 Brier 43,000 Purchasing 8 Sarah 56,000 9 Sophie 35,000 Personnel & PR ansattfnavn Sarah
Modeling a 1:1 recursive relationship The English monarchy
Mapping a 1:1 recursive relationship monarch montype monname monnum rgnbeg premonname premonnum Queen Victoria I 1837/6/20 William IV King Edward VII 1901/1/22 George V 1910/5/6 VIII 1936/1/20 VI 1936/12/11 Elizabeth II 1952/2/6
Creating the table CREATE TABLE monarch ( montype VARCHAR(5), monname VARCHAR(15) NOT NULL, monnum VARCHAR(5) NOT NULL, rgnbeg DATE, premonname VARCHAR(15), premonnum VARCHAR(5), PRIMARY KEY(monname,monnum));
Spørring fra en 1:1 rekursiv sammenheng Hvem regjerte før Elizabeth II? SELECT premonname, premonnum FROM monark WHERE monname = 'Elizabeth' and MONNUM = 'II'; premonname premonnum George VI
Querying a 1:1 recursive relationship Was Elizabeth II's predecessor a king or queen? SELECT pre.montype FROM monarch cur, monarch pre WHERE cur.premonname = pre.monname AND cur.premonnum = pre.monnum AND cur.monname = 'Elizabeth' AND cur.monnum = 'II'; montype King
Querying a 1:1 recursive relationship List the kings and queens of England in ascending chronological order. SELECT montype, monname, monnum, rgnbeg FROM monarch ORDER BY rgnbeg; montype monname monnum rgnbeg Queen Victoria I 1837-06-20 King Edward VII 1901-01-22 George V 1910-05-06 VIII 1936-01-20 VI 1936-12-11 Elizabeth II 1952-02-06
Modellering av en m:m rekursiv sammenheng Bill of materials (materialliste) problem Et produkt kan være en del av mange andre produkter og kan være satt sammen av mange andre produkter PRODUKT *prodid prodbeskr prodkostnad prodpris SAMMENSETNING antall
Mapping av en m:m rekursiv sammenheng PRODUkT PRODID PRODBESKR PROD KOSTNAD PRODPRIS 1000 Animal photography kit 725 101 35mm camera 150 300 102 Camera case 10 15 103 70-210 zoom lens 125 200 104 28-85 zoom lens 115 185 105 Photographer’s vest 25 40 106 Lens cleaning cloth 1 1.25 107 Tripod 35 45 108 24 exposure, 100 ASA, 35mm color negative film .85 SAMMEN- SETNING ANTALL PRODID SUBPRODID 1 1000 101 102 103 104 105 2 106 107 10 108
Å lage tabellene CREATE TABLE PRODUKT ( PRODID INTEGER, PRODBESKR VARCHAR(30), PRODKOSTNAD DECIMAL(9,2), PRODPRIS DECIMAL(9,2), PRIMARY KEY(PRODID)); CREATE TABLE SAMMENSETNING ( QUANTITY INTEGER NOT NULL, SUBPRODID INTEGER, PRIMARY KEY(PRODID, SUBPRODID), CONSTRAINT FK_SAMMENSETNING_PRODUKT FOREIGN KEY(PRODID)REFERENCES PRODUKT, CONSTRAINT FK_SAMMENSETNING_SUBPRODUKT FOREIGN KEY(SUBPRODID)REFERENCES PRODUKT);
Spørring mot en m:m rekursiv sammenheng Finn produktid for hver del av dyrefotograferingspakken. SELECT SUBPRODID FROM PRODUKT, SAMMENSETNING WHERE PRODBESKR = 'Animal photography kit' AND PRODUKT.PRODID = SAMMENSETNING.PRODID; SUBPRODID 101 106 107 105 104 103 102 108
Spørring mot en m:m rekursiv sammenheng Finn produktbeskrivelse og kostnad for hver komponent av dyrefotograferingspakken. SELECT PRODBESKR, PRODKOSTNAD FROM PRODUKT WHERE PRODID IN (SELECT SUBPRODID FROM PRODUKT, SAMMENSETNING WHERE PRODBESKR = 'Animal photography kit' AND PRODUKT.PRODID = SAMMENSETNING.PRODID); PRODBESKR PRODKOSTNAD 35mm camera 150.00 Camera case 10.00 70-210 zoom lens 125.00 28-85 zoom lens 115.00 Photographer’s vest 25.00 Lens cleaning cloth 1.00 Tripod 35.00 24 exp. 100ASA 35mm col neg 0.85