MySQL - Fremmednøgler

Fremmednøgler

MySQL er en relations database, og man skaber relationerne mellem tabellerne ved hjælp af nøgler. Relationerne skabes ved at man forbinder to felter med hinanden, og kaldes et foreign key relationship. For at kunne danne disse relationer kræver det at posterne er indekserede, at de har fået en key. Vi har sørget for at alle tabellerne er indekseret med en Primary Key, så de felter er indekserede og klar til brug.

Når vi sætter en relation op skal vi bestemme om det skal være 1-til-1, 1-til-mange, og det er det vi skal lære her. Relationerne kan have mange funktionaliteter, men vi vil i denne sammenhæng anvende dem til at sikre, at data der anvendes andre steder ikke kan blive slettet.

Forestil dig en tabel med lærere, hvoraf nogle er mentorer og der er oprettet en selvstændig tabel der omhandler mentorer. For at undgå redundans vil man igennem normaliseringsprocessen sørge for at data kun står et sted, og derfor vil mentortabellen være afhængig af data i lærertabellen. Fremmednøglen forhindrer at man kan slettet en lærer i lærertabellen, hvis den bliver anvendt i mentortabellen. I denne guide vil vi oprette en fremmednøgle mellem de to tabeller klasser_og_mentorer og lærere. Herefter skal du selv oprette forbindelse mellem klasse_og_elever og lærere.

For at man kan oprette relationer mellem tabeller kræver det at databaserne er af typen InnoDB (som er standard for MySQL), og at felterne der skal anvendes er indekseret. At et felt er indekseret betyder at MySQL kender til feltet og derfor kan danne relationer mellem kendte felter.

Arbejdsprocessen er at man skal sørge for at alle felter der skal forbindes er indekseret. Dernæst skal man åbne designer vinduet og forbinde felterne med hinanden. Til sidst bør man

Indekser et felt

Åbn tabellen klasser_og_mentorer og vælg Struktur-fanen.

Lige under dette felt kan du se de indeks der er oprettet i tabellen.

Som du kan se er det kun feltet Klasse der er indekseret som PRIMARY.

For at få feltet Mentor til at være indekseret, går du ud mod højre på linjen og klikker på Indeks. I dette tilfælde er vinduet forstørret, så feltet står i menuen Mere.

Bekræft at du vil oprette indekset.

Kontroller at indekset er oprettet ved at klikke på indeks

Opret relationer

En relation er sammenhængen mellem poster i to tabeller. I vores database er det f.eks. være klassen (f.eks. 1a) der optræder som Unik nøgle eller indeks i en tabel

Herunder vil vi oprette forbindelse mellem klasse-posterne i tabellerne klasse_og_elever og klasse_og_mentorer. Vi skal altså lave en forbindelse mellem:

klasse_og_elever.klasse

og

klasse_og_mentorer.klasse

Vælg Designer

For at oprette relationer mellem tabellerne skal vi først vælge hele databasen og herefter menuen Designer

Inde i designervinduet får vi tabellerne vist, og de kan omplaceres på samme måder som normale programmer. Arranger dem som herunder.

Opret relationerne

Ved at holde musen hen over ikonlinjen til venstre kan du finde menuen Opret relation. Klik på den:

Når du har klikket på feltet Opret relation, vil der komme en grøn tekstramme ved markøren hvor der står: Vælg refereret nøgle.

Klik på klasse_og_elever.klasse.

Herefter ændrer teksten i det grønne felt sig til Vælg fremmednøgle

Klik på feltet klasse_og_mentorer.klasse.

Når du har gjort det kommer der en blå boks frem. Her skal du vælge RESTRICT i begge felter. Det betyder at vi låser feltet med den refererede nøgle, så det ikke kan slettes hvis der er forekomster af denne i fremmedtabellen.

Herefter kan du se relationen som en streg mellem felterne i tabellen. Læg mærke til udformningen af den i enderne.

Kontroller relationerne

For at kontrollere om relationerne er sat skal du kontrollere tabellen med fremmednøglerne. I vores tilfælde er det tabellen klasser_og_mentorer. Gå ind i tabellen, vælg menuen Struktur og klik på knappen Visning af relation

Her har du et overblik over de relationer der er til tabellen og slette en relation hvis den er oprettet forkert. De to første værdier angiver fremmednøglens navn og kolonnen der bliver brugt. De tre side værdier angiver databasen - tabellen - og kolonnen som fremmednøglen styres af.

Test relationerne

For at teste om det virker går vi ind i tabellen klasser_og_elever, og forsøger på at slette en af klasserne. Klik på menuen Struktur og vælg tabellen klasser_og_elever. Her efter vælger du slet i en af dine poster.

Tryk OK, og hvis du får følgende "fejlmeddelelse", så fungerer dine fremmednøgler

Opret sidste relation

Opret selv relationer med felterne Mentor i tabellerne mentorer og klasser_og_mentorer. Husk at vælge hele databasen. Designervinduet vil skal se ud som herunder. Test om det virker som det skal ved at forsøge på at slette en af mentorerne i mentorer-tabellen. Nogle gange kan man være ude for at relationerne ikke er synlige i designervinduet. Hvis en relation bliver oprettet, men der ikke er nogen forbindelse mellem tabellerne kan du tjekke det ved at følge fremgangsmåden ovenfor.

SQL kommandoer

Opret indeks kommando

	
ALTER TABLE klasser_og_mentorer
ADD INDEX(Mentor);
	

Vis indeks

	
SHOW INDEX FROM klasser_og_mentorer;