Ich habe eine Fotogalerie. Ich möchte die Schaltfläche "Zu Favoriten hinzufügen" hinzufügen, damit Benutzer andere Benutzer zu ihren Favoriten hinzufügen können. Und dann möchte ich, dass jeder Benutzer in der Lage ist, seine Liste der bevorzugten Benutzer zu sehen und zuzusehen, wer (Benutzerliste) diesen Benutzer den Favoriten hinzugefügt hat.
Ich habe zwei Wege gefunden, und der erste ist:
%Vor%Ich mag diese Methode nicht wegen 1) eine Menge von Wiederholung 2) sehr große Tabelle in der Zukunft (wenn ein mindestens 1001 Benutzer haben, und jeder mag andere 1000 Benutzer = 1 001 000 Datensätze), die meine Basis verlangsamen wird.
Der zweite Weg ist:
%Vor% Ich kann diese favs nehmen und sie explodieren () sie in php oder suchen, wenn Benutzer einen anderen Benutzer durch die MySQL-Abfrage select count(user_id) from users where favs LIKE '% 23 %' and user_id=10;
Aber ich fühle, dass der zweite Weg in MySQL-Begriffen nicht sehr "korrekt" ist.
Können Sie mir etwas empfehlen?
Denken Sie darüber nach. Ihr Argument gegen die Verwendung des ersten Ansatzes ist, dass Ihre Tabellen zu groß werden, aber Sie sagen dann weiter, dass Sie bei Verwendung des zweiten Ansatzes eine Wildcard-Abfrage ausführen könnten, um Felder zu finden, die etwas enthalten.
Der zweite Ansatz erzwingt eine vollständige Tabellensuche und ist nicht indexierbar. Mit dem ersten Ansatz schlagen Sie einfach Indizes auf jede Ihrer Spalten und Sie können loslegen. Der erste Ansatz ist viel besser, viel besser als der zweite. Da Scaling Ihre einzige Sorge bei der ersten ist, denke ich, die Antwort ist offensichtlich.
Gehen Sie mit dem ersten Ansatz. Viele-zu-Viele-Tabellen werden überall und aus gutem Grund verwendet.
Bearbeiten:
Ein weiteres Problem besteht darin, dass der zweite Ansatz viel Arbeit bei der Aufrechterhaltung der Datenbank für die Anwendung abgibt. In einigen Fällen ist das in Ordnung, aber die Fälle, über die Sie sprechen, sind Dinge, die die Datenbank hervorhebt . Sie würden das Rad nur neu und schlecht erfinden.
Gehen Sie auf jeden Fall mit dem ersten Weg.
Ich habe eine Fotogalerie. Ich möchte die Schaltfläche "Zu Favoriten hinzufügen" hinzufügen, damit Benutzer andere Benutzer zu ihren Favoriten hinzufügen können. Und dann möchte ich, dass jeder Benutzer in der Lage ist, seine Liste der bevorzugten Benutzer zu sehen und zuzusehen, wer (Benutzerliste) diesen Benutzer den Favoriten hinzugefügt hat.
Ich habe zwei Wege gefunden, und der erste ist:
%Vor%Ich mag diese Methode nicht wegen 1) eine Menge von Wiederholung 2) sehr große Tabelle in der Zukunft (wenn ein mindestens 1001 Benutzer haben, und jeder mag andere 1000 Benutzer = 1 001 000 Datensätze), die meine Basis verlangsamen wird.
Der zweite Weg ist:
%Vor% Ich kann diese favs nehmen und sie explodieren () sie in php oder suchen, wenn Benutzer einen anderen Benutzer durch die MySQL-Abfrage params
Aber ich fühle, dass der zweite Weg in MySQL-Begriffen nicht sehr "korrekt" ist.
Können Sie mir etwas empfehlen?
Nun, der zweite Weg ist nicht so einfach, wenn Sie entfernen oder Änderungen vornehmen wollen, aber das ist alles in Bezug auf MySQL. Obwohl Joomla sogar ein anderes Datum der Information im selben Feld namens %code% enthält.
Denken Sie darüber nach. Ihr Argument gegen die Verwendung des ersten Ansatzes ist, dass Ihre Tabellen zu groß werden, aber Sie sagen dann weiter, dass Sie bei Verwendung des zweiten Ansatzes eine Wildcard-Abfrage ausführen könnten, um Felder zu finden, die etwas enthalten.
Der zweite Ansatz erzwingt eine vollständige Tabellensuche und ist nicht indexierbar. Mit dem ersten Ansatz schlagen Sie einfach Indizes auf jede Ihrer Spalten und Sie können loslegen. Der erste Ansatz ist viel besser, viel besser als der zweite. Da Scaling Ihre einzige Sorge bei der ersten ist, denke ich, die Antwort ist offensichtlich.
Gehen Sie mit dem ersten Ansatz. Viele-zu-Viele-Tabellen werden überall und aus gutem Grund verwendet.
Bearbeiten:
Ein weiteres Problem besteht darin, dass der zweite Ansatz viel Arbeit bei der Aufrechterhaltung der Datenbank für die Anwendung abgibt. In einigen Fällen ist das in Ordnung, aber die Fälle, über die Sie sprechen, sind Dinge, die die Datenbank hervorhebt . Sie würden das Rad nur neu und schlecht erfinden.
Tags und Links mysql