Het leuke werk, integriteit behouden

Op de voorgaande pagina stonden wat SQL-dumps voor nieuwe tabellen. Die tabellen gaan we nu koppelen.

Wat kun je nou met die relaties? Nou, je dwingt op database-niveau af dat er in de tabel met berichten alleen records kunnen zitten van gebruikers welke voorkomen in de tabel met gebruikers!

Hoe je dit doet is een stukje SQL-code, waarbij je verschillende mogelijkheden hebt. Het gaat hier om de tabel met berichten, daarin liggen de FK’s naar de tabel gebruikers:

## Foreign key aanmaken welke van_gebruiker_id koppelt aan de tabel met gebruikers
ALTER TABLE berichten ADD FOREIGN KEY(van_gebruiker_id) REFERENCES gebruikers(gebruiker_id) ON DELETE CASCADE ON UPDATE CASCADE

## Foreign key aanmaken welke naar_gebruiker_id koppelt aan de tabel met gebruikers
ALTER TABLE berichten ADD FOREIGN KEY(naar_gebruiker_id) REFERENCES gebruikers(gebruiker_id) ON DELETE CASCADE ON UPDATE CASCADE

Het laatste stukje in de query vertelt al wat er gebeurt. Als er een record uit de tabel gebruikers wordt verwijderd zullen bijbehorende berichten ook verwijderd worden, daar zorgt het stukje ON DELETE CASCADE voor.

Als het gebruiker_id in de tabel gebruikers wordt aangepast zullen automatisch alle berichten worden aangepast naar de nieuwe gebruiker_id, daar zorgt het stukje ON UPDATE CASCADE voor. CASCADE staat voor “achterelkaar” of “trapsgewijs”, er worden dus meerdere acties achter elkaar uitgevoerd.

Je kunt dit natuurlijk ook andersom doen, waarmee je je data beveiligt, zodat je geen user kan verwijderen zolang er nog berichten zijn welke voor of van de gebruiker zijn. Het stukje ON DELETE CASCADE vervang je dan door ON DELETE RESTRICT. Naast deze mogelijkheden bestaan er nog SET NULL en NO ACTION, deze twee zijn vanzelfsprekend.

« Lees de omschrijving en reacties

Inhoudsopgave

  1. Inleiding
  2. Wat zijn transactions?
  3. Wat zijn PK / FK-relaties
  4. Het leuke werk, integriteit behouden
  5. Een stukje voorbeeldcode
  6. Tips & Tricks

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.