Nieuwe tabel maken en InnoDB

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

George van Baasbank

George van Baasbank

23/09/2013 10:49:27
Quote Anchor link
Hallo allemaal,

Ik maak t.b.v. mijn site regelmatig nieuwe tabellen aan. Dit gaat zonder problemen. Wat mij echter opvalt is dat sinds enige tijd phpMyAdmin een andere, nieuwe opslagengine toont. Tegenwoordig is dit InnoDB terwijl voorheen gebruik gemaakt werd van myISAM.
Mijn vraag zijn nu:
1. Wat is het verschil tussen beide instellingen,
2. Kan ik beide engines door elkaar gebruiken


George
 
PHP hulp

PHP hulp

17/11/2024 12:33:20
 
Kris Peeters

Kris Peeters

23/09/2013 11:03:39
Quote Anchor link
InnoDB biedt een aantal extra's.
bv. met InnoDB kan je foreign key's zetten;

Je kan bv ook dit doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
    PRIMARY KEY(page_id),
    FOREIGN KEY(section_idfk) REFERENCES sections(section_id)
    ON DELETE CASCADE
    ON UPDATE CASCADE


Dus, daarmee stel je je tabel in zodat ze de connectie blijft leggen.

Voorbeeld: je hebt een tabel 'users', en een tabel 'messags' (een shout box, of gastenboek of zo)
Tabel messages bevat een veld 'author', waarin je de username zet.
Dus zowel in users als in messages staat bv. de wa&arde 'Tom'.
Als Tom zijn profiel wijzigt, en nu 'Tommeke' heet, wordt de waarde Tom ook aangepast naar Tommeke in de tabel messages.
Als Tom zijn account verwijdert, worden ook alle messages met user="Tom" verwijderd.
 
Erwin H

Erwin H

23/09/2013 11:07:00
Quote Anchor link
Er zijn veel verschillen tussen MySQL engines en je kan ze zonder meer door elkaar gebruiken. Sterker, dat zal je bijna altijd doen, aangezien je normaal gesproken de beste engine wil gebruiken voor elke tabel en niet elke tabel heeft dezelfde eisen. De meeste gebruikte worden hier uitgelegd met een handige cross reference tabel: http://www.supportsages.com/blog/2010/08/mysql-storage-engines-an-overview-their-limitations-and-an-attempt-for-comparison/

Meer (alle?) engines staan op wikipedia, maar met minder uitleg: http://en.wikipedia.org/wiki/Comparison_of_MySQL_database_engines
 
John D

John D

23/09/2013 11:20:54
Quote Anchor link
Kris Peeters op 23/09/2013 11:03:39:
InnoDB biedt een aantal extra's. Als Tom zijn profiel wijzigt, en nu 'Tommeke' heet, wordt de waarde Tom ook aangepast naar Tommeke in de tabel messages.
Als Tom zijn account verwijdert, worden ook alle messages met user="Tom" verwijderd
Een relatie als deze is overigens niet aan te bevelen. Leg de relaties bij voorkeur altijd op ID zoals in het voorbeeld, id en idfk. De wijziging van Tom naar Tommeke hoeft dan alleen maar in het profiel plaats te vinden en niet in de child-records.
 
Kris Peeters

Kris Peeters

23/09/2013 11:28:11
Quote Anchor link
Waarom zou je dit niet aanraden?
Dit is er toch speciaal voor gemaakt?

Okay, stel, een clean name (geen speciale tekens; spaties vervangen door _ ), iets wat zonder probleem in een URL kan ...
Waarom zou je die relatie niet daarmee zetten?


(Niet dat ik je ongelijk geef, hoor, maar je maakt je er wat gemakkelijk van af)
 
John D

John D

23/09/2013 12:15:25
Quote Anchor link
Kris Peeters op 23/09/2013 11:28:11:
Waarom zou je dit niet aanraden?
Dit is er toch speciaal voor gemaakt?
Het is niet gemaakt om een string honderden malen te herhalen. Het is gegevenstechnisch onzin om de naam Tommy of Tommeke honderden malen op te slaan, dit gegeven hoort thuis in de bovenste entiteit. De foreign key relatie is gemaakt voor gegevens integriteit (parent-child) en om dat efficient te gebruiken moet je dat altijd doen op ID's en niet op gegevens die je dan onnodig gaat herhalen zoals Tom, Tommy, Tommeke etc. Wanneer Tom honderden messages heeft en hij past tom aan naar Tommeke zou dat in het voorbeeld geval een update van honderden keren Tom naar Tommeke worden. Absoluut fout qua gegevensverwerking en datamodellering.
Gewijzigd op 23/09/2013 12:16:45 door John D
 
Kris Peeters

Kris Peeters

23/09/2013 12:28:04
Quote Anchor link
Akkoord dat "ON DELETE CASCADE" zinniger is dan "ON UPDATE CASCADE"?

De dingen die je aanhaalt, maken dan weinig uit.
 
John D

John D

23/09/2013 12:45:30
Quote Anchor link
Kris Peeters op 23/09/2013 12:28:04:
Akkoord dat "ON DELETE CASCADE" zinniger is dan "ON UPDATE CASCADE"?
De dingen die je aanhaalt, maken dan weinig uit.
Correct, wanneer je de key en de foreign key's koppelt op ID is een cascade update overbodig maar nogmaals, altijd op id werken en niet op tommy. Nooit gegevens herhalen.
 



Overzicht Reageren

 
 

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.