Ik begin voor mezelf aan een nieuwe website en daarbij hoort ook een database. Nu zit ik al een tijdje in de ontwerp fase en kan ik maar geen keus maken wat voor datatype ik voor de primary's keys van tabellen wil gebruiken. Ik heb veel gezocht op GoT en google, en krijg voor mezelf de volgende opties:
- AutoIncrement: dit lijkt de meeste simpele en ultieme oplossing. Echter een aantal nadelen. Het geeft performance terugslag omdat je in sommige gevallen moet gaan opvragen wat het ID is geworden wat de database geeft aan een record. Tevens kan het fout gaan bij backup's terug plaatsen of verschillende databases mergen.
- GUID / overig uniek ID: MySQL ondersteund zelf voor zover ik weet niet een GUID generatie, en ook voor PHP heb ik het nog niet kunnen vinden. Een algoritme wat er in ieder geval op lijkt zal wel in elkaar te zetten zijn (php heeft bijv. ook uniqid()) maar ook deze kent nadelen. Het is een kleine kans, maar het kan zijn dat je twee dezelfde id's genereert wat natuurlijk niet mag. Dit zou je dan eigenlijk zelf moeten gaan controleren, en records die je weg gooit zou je eventueel de id's van bij moeten houden zodat je deze niet nog een keer gebruikt, uit ultieme veiligheid. Ook dit alles heeft natuurlijk negatieve invloed op de performance.
- Zelf ophogen van de hoogst gebruikte id. Dit geeft geen problemen bij mergen of backups terug plaatsen maar is natuurlijk weer negatief op je performance omdat je zelf moet gaan kijken wat de maximale ID is. Tevens als je records weggooid bestaat de kans dat je een foreign key ergens laat staan, en deze daarna laat verwijzen naar een nieuw aangemaakt record welke dezelfde ID krijgt omdat je nu eenmaal 1 optelt bij de vorige ID. Je zou dus of niets mogen weggooien (wat ruimte kost natuurlijk) of je moet gaan bijhouden in een aparte tabel welke ID's je niet meer mag gebruiken.
-=[Een wijs man zei eens: als een tweaker heb ik zo mijn TCP-IP connecties. Deze uitspraak staat tot op de dag van vandaag © mr._Anderson]=-=[ AMD64 overclock en registratie site: AMDGeeks.net