Mysql
 sql >> Database >  >> RDS >> Mysql

Molti a molti sullo stesso tavolo

Se la relazione che stai descrivendo è simmetrica, poiché in "Bob è un amico di Joe" significa "Joe è anche un amico di Bob", allora puoi assicurarti nel tuo codice che il più piccolo dei 2 ID utente vada sul prima colonna, e quella più grande va sulla seconda colonna. Questo vincolo garantisce praticamente che i record nella tabella di ricerca siano univoci. Significa anche che quando esegui una ricerca, di solito devi cercare in entrambe le colonne.

Ad esempio, se stavi cercando di ottenere tutti gli amici di Bob, dovresti cercare i record che hanno l'ID di Bob in una delle colonne. Questo porta a un po' più di codice e forse a un impatto sulle prestazioni.

Se la relazione può essere asimmetrica, come in "Bob è un amico di Joe" non significa necessariamente "Joe è anche un amico di Bob", allora hai bisogno di 2 voci per ogni coppia di utenti:Bob - Joe e Joe - Bob. Ciò significa che la tua tabella di ricerca conterrà il doppio delle voci e anche che il tuo sito è molto adatto agli stalker :D Naturalmente, puoi comunque scegliere di applicare questo sistema anche se la tua relazione è simmetrica.

Usando questo metodo, se vuoi ottenere tutti gli amici di Bob devi solo selezionare i record con l'ID di Bob nella prima colonna. È possibile che ciò significhi ricerche più veloci e meno codice da scrivere, ma ancora una volta significa che stai occupando più spazio nel tuo database.