login  Naam:   Wachtwoord: 
Registreer je!
 Nota's op tutorial:

Tutorials > MySQL > Foreign Keys: Wat zijn het en hoe gebruik ik ze?
Pagina:

Reacties op de tutorial Foreign Keys: Wat zijn het en hoe gebruik ik ze?


Offline  Koen
Gepost op: 27 november 2009 - 20:04
PHP expert

Genoteerd, bedankt voor de inzending en succes ;)

Offline  Mario
Gepost op: 04 december 2009 - 11:02
Crew algemeen

Wist dat het bestond, echter geen ervaring mee.
Is (voor mij althans) een zeer nuttige tut

thx.

Offline  Rik
Gepost op: 05 december 2009 - 10:52
Gouden medailleGouden medaille

Crew algemeen


Erg duidelijk met al die afbeeldingen. Ik had alleen gehoopt dat je zou uitleggen dat je met foreign keys de join statements wat kon vereenvoudigen. Nu lees ik op mysql.com dat dat niet kan, dus je tutorial is gewoon compleet! (Y)

Offline  Wave6
Gepost op: 22 januari 2010 - 23:50
PHP beginner

Mooie tutorial!:D Eindelijk weer wat echt handig kan zijn!:D

Offline  Thomas
Gepost op: 06 augustus 2014 - 14:46
Moderator

Deze tutorial is inmiddels wat gedateerd, maar nog wel enigszins actueel. Wel de volgende kanttekeningen:

* Het doel van foreign keys is het waarborgen van referentiële integriteit, oftewel, het kloppend (of synchroon) houden van je database-data. Daarnaast maakt het gebruik van foreign keys het bewerken van je database-data eenvoudiger. Foreign keys zorgen er kortweg voor dat je database-tabellen niet meer als los zand aan elkaar hangen.

* Het is niet (meer) nodig om apart keys voor je foreign keys aan te maken, dit gebeurt automatisch (althans, in de InnoDB engine).

* Indien je van een kolom een foreign key wilt maken, dan moet deze van hetzelfde type zijn als de kolom waaraan je refereert. Voor complexere foreign keys moet je ook rekening houden met zaken als kolomvolgorde.

Over de tutorial inhoudelijk:
Citaat:
NO ACTION is wat een FK standaard doet als er geen andere optie gekozen is.
NO ACTION en RESTRICT zijn (blijkbaar) hetzelfde. Ook zou je in plaats van ON UPDATE/ON DELETE acties kunnen denken aan TRIGGERs.

Het voorbeeld is misschien niet helemaal handig gekozen, immers, producten houden niet ineens op met bestaan op het moment dat een bedrijf wordt verwijderd.
Ook is het heel erg belangrijk om goed na te denken over de structuur van je tabellen en de koppelingen hiertussen. Zo is het bijvoorbeeld niet mogelijk dat twee verschillende bedrijven hetzelfde product aanbieden. Wellicht was een koppeltabel beter geweest in dit voorbeeld. Hier kun je dan tevens bedrijfsspecifieke informatie ophangen aan een product, zoals bijvoorbeeld verkoopprijs (die per bedrijf kan verschillen).

Daarnaast wil je wellicht, om administratieve redenen, data wel bewaren indien deze "verwijderd" wordt, maar niet meer tonen aan de gebruiker. Stel dat je per ongeluk iets verwijdert. Als je echt zaken DELETE in je database zijn ze voorgoed weg. Je zou deze data toch kunnen bewaren door tabellen te voorzien van een (boolean) "deleted" kolom. Als je een record dan "verwijdert", dan UPDATE je in werkelijkheid de "deleted" kolom. Wel zul je dan in al je queries een "WHERE deleted = 0" conditie op moeten nemen voor elke tabel die hier gebruik van maakt om er zeker van te zijn dat geen "verwijderde" data wordt getoond. Ook het weer terughalen van "verwijderde" data is niet in alle gevallen eenvoudig, dit wordt over tijd meestal steeds lastiger.

Pagina:

Enkel aanvullende informatie is welkom. Geen prijzende of afkeurende reacties.
 
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.014s