Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Many-to-Many am selben Tisch

Wenn die Beziehung, die Sie beschreiben, symmetrisch ist, wie in "Bob ist ein Freund von Joe" bedeutet "Joe ist auch ein Freund von Bob", dann können Sie in Ihrem Code sicherstellen, dass die kleinere der beiden Benutzer-IDs auf geht erste Spalte, und der größere kommt in die zweite Spalte. Diese Einschränkung stellt so ziemlich sicher, dass die Datensätze in Ihrer Nachschlagetabelle eindeutig sind. Das bedeutet auch, dass Sie bei einer Suche normalerweise beide Spalten durchsuchen müssen.

Wenn Sie beispielsweise versuchen, alle Freunde von Bob abzurufen, müssten Sie nach Datensätzen suchen, die Bobs ID in einer der beiden Spalten enthalten. Dies führt zu etwas mehr Code und möglicherweise zu einer Beeinträchtigung der Leistung.

Wenn die Beziehung asymmetrisch sein kann, da „Bob ist ein Freund von Joe“ nicht unbedingt „Joe ist auch ein Freund von Bob“ bedeutet, dann benötigen Sie 2 Einträge für jedes Benutzerpaar:Bob – Joe und Joe – Bob. Das bedeutet, dass Ihre Nachschlagetabelle doppelt so viele Einträge enthalten wird und dass Ihre Seite außerdem sehr stalkerfreundlich ist :D Natürlich können Sie sich trotzdem dafür entscheiden, dieses System anzuwenden, obwohl Ihre Beziehung symmetrisch ist.

Wenn Sie mit dieser Methode alle Freunde von Bob abrufen möchten, müssen Sie nur die Datensätze mit Bobs ID in der ersten Spalte auswählen. Möglicherweise bedeutet dies schnellere Suchvorgänge und weniger Code, den Sie schreiben müssen, aber auch hier bedeutet dies, dass Sie mehr Platz in Ihrer Datenbank einnehmen.