Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Mange til mange sammenhengen

Liknende presentasjoner


Presentasjon om: "Mange til mange sammenhengen"— Utskrift av presentasjonen:

1 Mange til mange sammenhengen
Skremmende sammenfall av omstendigheter Daniel Webster

2 Et salgsskjema - kvittering

3 Mange til mange sammenhengen
Skap en tredje entitet for å lage en m:m sammenheng Assosieringsentitet (Entitetisering) Den vertikale streken på kråkefoten indikerer at varelinje kan identifiseres ved å sette sammen salgnr og linjenr SALG SALGSLINJE VARE *salgnr *linjenr *varenr salgsdato antall varenavn salgstekst linjepris varetype varefarge

4 NB! Notasjonsforskjeller
Boka følger ORACLES notasjonsstandard Vertikal strek betyr at én sidens identifikator er en del av mangesidens identifikator - mangesiden er en svak entitet Modelator Vertikal strek betyr en, med kråkefot en eller fler. Kan bare uttrykke svake entiteter indirekte UML markerer sammenhengen som non identifying - sterk entitet på mangesiden identifying - svak entitet på mangesiden

5 Modelator

6 Rational

7 Hvorfor den tredje entiteten?
Lagre data om sammenhengen Betrakte en m:m sammenheng som to 1:m sammenhenger

8 Lage en relasjonsdatabase
Bruke samme regler som tidligere Den assosiative tabellen har to fremmednøkler En for hver av entitetene i mange til mange forholdet En fremmednøkkel kan også være en del av primærnøkkelen til en assosiativ entitet salgslinje linje- nummer antall stykkpris salg- nummer vare- nummer 1 4.50 2 25.00 6 20.00 16 3 19

9 Lage relasjonsdatabasen
CREATE TABLE salg ( salgnr NUMBER(8,0), salgsdato DATE, salgstekst VARCHAR(50), PRIMARY KEY(salgnr)); CREATE TABLE vare ( varenr INTEGER, varenavn VARCHAR(30), varetype CHAR(1), varefarge VARCHAR(10), PRIMARY KEY(varenr)); CREATE TABLE salgslinje ( linjenr INTEGER, antall INTEGER, pris DECIMAL(7,2), salgnr INTEGER, PRIMARY KEY(linjenr, salgnr), CONSTRAINT fk_salgslinje_salg FOREIGN KEY(salgnr) REFERENCES salg, CONSTRAINT fk_salgslinje_vare FOREIGN KEY(varenr) REFERENCES vare);

10 En join med tre tabeller
List opp navnene til alle tre tabeller etter FROM Spesifiser to vilkår som matcher den assosiative tabellen med de andre tabellene SELECT * FROM salg, salgslinje, vare WHERE salg.salgnr = salgslinje.salgnr AND vare.varenr = salgslinje.varenr;

11 En join med tre tabeller
Finn navnene på varer, antall og verdi på varer solgt SELECT varenavn, antall, pris, antall*pris AS total FROM salg, salgslinje, vare WHERE salgslinje.salgnr = salg.salgnr AND vare.varenr = varelinje.varenr AND dato = ' '; varenavn antall pris total Pocket knife—Avon 1 0.00 Safari chair 50 36.00 Hammock 40.50 Tent—8 person 8 153.00 Tent—2 person 60.00

12 EXISTS Existential qualifier Returnerer true eller false
Returnerer true hvis tabellen inneholder minst en rad som tilfredsstiller det vilkåret Finn alle klesvarer (type “C”) der det har funnet sted et salg SELECT varenavn, varefarge FROM vare WHERE varetype = 'C' AND EXISTS (SELECT * FROM varelinje WHERE varelinje.varenr = vare.varenr); varenavn farge Hat—Polar Explorer Red Boots—snake proof Black Pith helmet White Stetson

13 NOT EXISTS Returnerer true hvis tabellen ikke inneholder noen rader som stemmer med vilkåret Finn alle klesvarer (type “C”) som ikke har vært solgt SELECT varenavn, varefarge FROM vare WHERE varetype = 'C' AND NOT EXISTS (SELECT * FROM varelinje WHERE vare.varenr = varelinje.varenr); varenavn varefarge Hat—Polar Explorer White Boots—snake proof Green Pith helmet Khaki Stetson Brown

14 For alle Den universelle kvantor Finnes ikke direkte i SQL
Implementer ved hjelp av 2 ggr NOT EXISTS Finn alle varer som er solgt i alle salg blir Finn varer slik at det ikke eksisterer salg der varen ikke eksisterer

15 For alle Finn varer som er med i alle salg
SELECT varenr, varenavn FROM vare WHERE NOT EXISTS (SELECT * FROM salg (SELECT * FROM varelinje WHERE varelinje.varenr = vare.varenr AND varelinje.salgnr = salg.salgnr)); varenr varenavn 2 Pocket knife—Avon

16 For alle - alternativ løsning
Finn varene som finnes i alle salg kan omskrives som Finn alle varer der antall salg som inkluderer varen er lik det totale antall salg. SELECT vare.varenr, vare.varenavn FROM vare, varelinje WHERE vare.varenr = varelinje.varenr GROUP BY vare.varenr, vare.varenavn HAVING COUNT(DISTINCT salgnr) = (SELECT COUNT(DISTINCT salgnr) FROM salg);

17 Mengdeoperasjoner UNION INTERSECT
Ekvivalent med OR INTERSECT Ekvivalent med AND Mengdeoperasjonene krever at operandene har identiske kolonner

18 UNION Finn alle varer som ble solgt 16. januar 2003 eller er brune
SELECT varenavn FROM vare, varelinje, salg WHERE vare.varenr = varelinje.varenr AND varelinje.salgnr = salg.salgnr AND dato = ' ' UNION SELECT varenavn FROM vare WHERE varefarge = 'Brown'; varenavn Hammock Map case Pocket knife—Avon Pocket knife—Nile Safari chair Stetson Tent—2 person Tent—8 person

19 INTERSECT Finn alle varer som ble solgt 16. januar 2003 og er brune
SELECT varenavn FROM vare, varelinje, salg WHERE vare.varenr=varelinje.varenr AND varelinje.salgnr=salg.salgnr AND dato = ' ' INTERSECT SELECT varenavn FROM vare WHERE varefarge = 'Brown'; varenavn Pocket knife—Avon


Laste ned ppt "Mange til mange sammenhengen"

Liknende presentasjoner


Annonser fra Google