Det skal lige sige at det er en MySQL base med MyIsam tabeller;
jeg spurgte en kammerat der har arbejdet noget mere med baser end jeg har, han snakkede om at jeg kunne bruge foreign keys. jeg undersøgte dette og kom frem til at MyIsam ikke understøtter dette men der i mod InnoDB.
>>lakridserne: jeg har lidt svært ved at gennemskue din anden post. er der nogen fordele ved at bruge join frem for foreign keys?
hvis jeg har 2 MyISAM tabeller, en med alle mine brugere og en der holder på mine hold. hvordan binder jeg så smartest user_id og event_id sammen i en InnoDB tabel med foreign keys rent php-kode messigt?
jeg læste på hvordan man sætter foreign keys op igennem phpMyAdmin, men jeg kan ikke helt gennemskue hvordan jeg så får det til at fungere rent praktisk :)
JOIN bruges i SELECT til at flette to tabeller sammen.
FOREIGN KEY bruges i CREATE TABLE til at definere en sammehaeng mellem tabeller. En FOREIGN KEY vil normalt betyde at de 2 tabeller skal joines i forskelleige queries.
Det primaere formaal med FOREIGN KEY er at sikre REFERENTIEL INTEGRITET d.v.s. at hvis man peger paa noget saa skal det man peger paa eksistere.
Det klassiske eksempel er nok postnumre og by.
adresse ------- id vej nummer postnr
postdistrikt ------------ postnr by
Her vil man jo typisk lave en JOIN som:
SELECT * FROM adresse JOIN postdistrikt ON adresse.postnr=postdistrikt.postnr
Men lad os kigge paa foelgende INSERT saetninger:
INSERT INTO postdistrikt VALUES(8000, 'Aarhus C'); INSERT INTO postdistrikt VALUES(7100, 'Vejle'); INSERT INTO postdistrikt VALUES(6000, 'Kolding'); INSERT INTO adresse VALUES(1, 'Avej', '1. th', 8000); INSERT INTO adresse VALUES(2, 'Bvej', '2. tvh', 6000); INSERT INTO adresse VALUES(3, 'Cvej', '3. mf', 80000);
Uden brug af FOREIGN KEYS saa virker de INSERT fint, men adresse #3 kommer ikke med i SELECT output fordi postnummer er skrevet forkert.
Hvis man har defineret en FOREIGN KEY fra adresse.postnr til postdistrikt.postnr, saa vil den forkerte INSERT give en fejl.
Og det er altid godt at forhindre forkerte data i at komme ind i ens database.
Og som naevnt i MySQL er det kun InnoDB tabeller som har support for FOREIGN KEYS.
JOIN bruges i SELECT til at flette to tabeller sammen.
FOREIGN KEY bruges i CREATE TABLE til at definere en sammehaeng mellem tabeller. En FOREIGN KEY vil normalt betyde at de 2 tabeller skal joines i forskelleige queries.
Det primaere formaal med FOREIGN KEY er at sikre REFERENTIEL INTEGRITET d.v.s. at hvis man peger paa noget saa skal det man peger paa eksistere.
Det klassiske eksempel er nok postnumre og by.
adresse ------- id vej nummer postnr
postdistrikt ------------ postnr by
Her vil man jo typisk lave en JOIN som:
SELECT * FROM adresse JOIN postdistrikt ON adresse.postnr=postdistrikt.postnr
Men lad os kigge paa foelgende INSERT saetninger:
INSERT INTO postdistrikt VALUES(8000, 'Aarhus C'); INSERT INTO postdistrikt VALUES(7100, 'Vejle'); INSERT INTO postdistrikt VALUES(6000, 'Kolding'); INSERT INTO adresse VALUES(1, 'Avej', '1. th', 8000); INSERT INTO adresse VALUES(2, 'Bvej', '2. tvh', 6000); INSERT INTO adresse VALUES(3, 'Cvej', '3. mf', 80000);
Uden brug af FOREIGN KEYS saa virker de INSERT fint, men adresse #3 kommer ikke med i SELECT output fordi postnummer er skrevet forkert.
Hvis man har defineret en FOREIGN KEY fra adresse.postnr til postdistrikt.postnr, saa vil den forkerte INSERT give en fejl.
Og det er altid godt at forhindre forkerte data i at komme ind i ens database.
Og som naevnt i MySQL er det kun InnoDB tabeller som har support for FOREIGN KEYS.
>>arne_v: fantastisk det satte lige flaget på kransekagen :D det er faktisk det jeg havde lidt svært ved at forstå ved de tutorials jeg havde fat i, men nu faldt det hele på plads. takker :) du skal være velkommen til at ligge et svar, da dette også burde premieres med lidt point :)
>>dkfire: du postede kun en kommentar, så det bliver lidt svært at uddele point til denne :)
Jo det kan jeg vel godt. Rent tilfælde jeg kiggede forbi.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.