sql >> Database >  >> RDS >> Mysql

Veel-op-veel op dezelfde tafel

Als de relatie die je beschrijft symmetrisch is, zoals in "Bob is een vriend van Joe" betekent "Joe is ook een vriend van Bob", dan kun je ervoor zorgen in je code dat de kleinste van de 2 gebruikers-ID's op de eerste kolom, en de grotere komt op de tweede kolom. Deze beperking zorgt er vrijwel voor dat de records in uw opzoektabel uniek zijn. Het betekent ook dat wanneer u een zoekopdracht uitvoert, u meestal in beide kolommen moet zoeken.

Als u bijvoorbeeld alle vrienden van Bob probeert te krijgen, moet u zoeken naar records met de ID van Bob in beide kolommen. Dit leidt tot wat meer code en mogelijk een impact op de prestaties.

Als de relatie asymmetrisch kan zijn, zoals in "Bob is een vriend van Joe" betekent niet noodzakelijkerwijs "Joe is ook een vriend van Bob", dan heb je 2 vermeldingen nodig voor elk paar gebruikers:Bob - Joe en Joe - Bob. Dit betekent dat uw opzoektabel twee keer zoveel items zal bevatten en ook dat uw site zeer stalkervriendelijk is :D Natuurlijk kunt u er nog steeds voor kiezen om dit systeem toe te passen, ook al is uw relatie symmetrisch.

Als u met deze methode alle vrienden van Bob wilt krijgen, hoeft u alleen de records met Bob's ID in de eerste kolom te selecteren. Het is mogelijk dat dit snellere zoekacties betekent en minder code die u hoeft te schrijven, maar nogmaals, het betekent dat u meer ruimte inneemt in uw database.



  1. Hoe een MySQL-databasegebruiker in cPanel te verwijderen

  2. PostgreSQL-prestaties benchmarken met Sysbench

  3. Wat is de equivalente PostgreSQL-syntaxis voor CONNECT BY... START WITH van Oracle?

  4. Af en toe SqlException krijgen:time-out is verlopen