Workman94 Skrevet 19. februar 2016 Del Skrevet 19. februar 2016 Vet noen hvordan man kan koble 2 tabeller som ser slik ut? Land(Navn,Flateinnhold,Hovedstad*) Byer(Navn,flateinnhold,Land*) CREATE TABLE Land ( Navn CHAR(40) , Flateinnhold CHAR(10) Hovedstad* CHAR(30) CONSTRANT LandPK PRIMARY KEY(Navn) ); CREATE TABLE Byer ( Navn CHAR(40) , Flateinnhold CHAR(10) Land* CHAR(40) CONSTRAINT ByerPK PRIMARY KEY(Navn) ); Vet ikke hvordan det går ann ettersom begge har fremmednøkler i seg så referanseintegriteten gir ikke mening,hadde vært fint å få et svar Lenke til kommentar
chri-ot Skrevet 20. februar 2016 Del Skrevet 20. februar 2016 Jeg tenker du kan bruke en join her, hvor du joiner where 'Land' i Byer er lik som 'Navn' i Land. Lenke til kommentar
Aleks855 Skrevet 20. februar 2016 Del Skrevet 20. februar 2016 Først og fremst, gi begge tabeller en id-kolonne. CREATE TABLE land ( id INT UNSIGNED NOT NULL AUTO INCREMENT, flateinnhold INT UNSIGNED, #bruker her INT siden det er en tallverdi PRIMARY KEY(id) ); CREATE TABLE by ( id INT UNSIGNED NOT NULL AUTO INCREMENT, flateinnhold INT UNSIGNED, land_id INT UNSIGNED NOT NULL, PRIMARY KEY(id), FOREIGN KEY (land_id) REFERENCES land(id) ); Huskeregel #1: Alltid, alltid ha en ID-kolonne i alle tabeller. Hovedstad-feltet i land-tabellen burde egentlig droppes. Hvis du har to tabeller med fremmednøkler som refererer til hverandre, så vil du få problemer med sletting og skaping av ny data. Les om "orphaned rows", eller spør her hvis du lurer på noe mer om det. Det jeg heller foreslår, er at du lager en link-tabell for hovedsteder, som ser slik ut: CREATE TABLE capitol( id INT UNSIGNED NOT NULL AUTO INCREMENT, land_id INT UNSIGNED, by_id INT UNSIGNED, FOREIGN KEY (land_id) REFERENCES land(id), FOREIGN KEY (by_id) REFERENCES by(id) ); Da har du en liste over alle land-hovedstad forhold, og kan enkelt hente ut denne dataen. Det chri-ot nevner om joins er ikke relevant for skaping av tabeller, men joins vil brukes når vi henter ut data, så det vil bli relevant etter hvert. Spør gjerne om det er mer du lurer på! Lenke til kommentar
Emancipate Skrevet 20. februar 2016 Del Skrevet 20. februar 2016 capital bør du kalle tabellen, ikke capitol. Jeg hater skrivefeil i selve programkoden. Lenke til kommentar
Workman94 Skrevet 20. februar 2016 Forfatter Del Skrevet 20. februar 2016 Jeg kan si hele oppgaven så kanskje det er litt mer klart,ikke ta dette feil,jeg skjønner hva jeg skal gjøre med hjelpen jeg har fått,men kan vise oppgaven: Lenke til kommentar
Workman94 Skrevet 20. februar 2016 Forfatter Del Skrevet 20. februar 2016 (endret) Gitt Følgene Database: Land(Navn,Flateinnhold,Hovedstad*) Byer(Navn,Flateinnhold,Land*) Innbyggertall(Navn*,Årstall,Antall) Grense(Land1*,Land2*) Land.Hovedstad er fremmednøkkel mot byer.Byer.Land , mot tabellen land,Flateinnhold er oppgitt i hele KM2. Anta att tabellen for innbyggertall innholder data for samtlige land hvert år fra 1970 til idag. Merk at tabellen grense er symetrisk.De vil si både("sverige norge") og ("Norge sverige") er rader i tabellen. Endret 20. februar 2016 av Workman94 Lenke til kommentar
Aleks855 Skrevet 20. februar 2016 Del Skrevet 20. februar 2016 Wow, denne oppgaven går virkelig løs på sjela. Det er jo ingen normalisering som foregår her. Hvem er det som har gitt deg denne oppgaven? Er det fra ei bok? Lenke til kommentar
Workman94 Skrevet 20. februar 2016 Forfatter Del Skrevet 20. februar 2016 Databasesystemer 3.utgave Lenke til kommentar
Aleks855 Skrevet 20. februar 2016 Del Skrevet 20. februar 2016 Et par poenger: Å bruke strenger som primary key er i utgangspunktet ikke et problem (selv om det i de fleste tilfeller er unødvendig risiko). I dette tilfellet er det helt uhørt. Et land kan endre navn. Det har skjedd før, og det kan skje igjen. Da må man i databasen sin her, endre verdien på en primary key, som skaper problemer for andre tabeller som har foreign keys som peker til en endret verdi. Derfor bruker vi alltid en ID-kolonne, som ikke holder noen data, den bare knytter det sammen, slik at vi kan peke til land #5 uavhengig av om det het Burma og har byttet navn til Myanmar. Alle innslag i byer-tabellen som peker dit, peker bare til land #5, så de trenger ikke å endres selv om landet har byttet navn. I tillegg er det åpent for at en skrivefeil skaper søppeldata. Siden oppgaven er lagt opp på denne måten er det begrenset hvor mye jeg kan hjelpe deg, men det ser ut som du er på riktig spor med det du har skrevet lengre opp. Derimot, hvis det er åpent for å lage sin egen løsning, så anbefaler jeg at du ser på måten jeg skapte tabellene. Jeg ser at boka legger opp til at normalisering skal læres, og jeg skrev det normalisert. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå