beste Möglichkeit, die "Favoriten" des Benutzers in MySQL zu speichern

8

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;

mögen

Aber ich fühle, dass der zweite Weg in MySQL-Begriffen nicht sehr "korrekt" ist.

Können Sie mir etwas empfehlen?

    
oyatek 11.12.2010, 06:25
quelle

3 Antworten

13

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.

    
AgentConundrum 11.12.2010, 06:37
quelle
1

Gehen Sie auf jeden Fall mit dem ersten Weg.

    
thirtydot 11.12.2010 06:35
quelle
1
___ qstnhdr ___ beste Möglichkeit, die "Favoriten" des Benutzers in MySQL zu speichern ___ tag123mysql ___ MySQL ist ein freies, relationales Datenbank-Managementsystem (RDBMS), das die strukturierte Abfragesprache (SQL) verwendet. Verwenden Sie dieses Tag NICHT für andere DBs wie SQL Server, SQLite usw. Dies sind verschiedene DBs, die alle SQL verwenden, um die Daten zu verwalten. ___ answer4415547 ___

Gehen Sie auf jeden Fall mit dem ersten Weg.

    
___ qstntxt ___

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

mögen

Aber ich fühle, dass der zweite Weg in MySQL-Begriffen nicht sehr "korrekt" ist.

Können Sie mir etwas empfehlen?

    
___ answer4415536 ​​___

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.

    
___ answer4415553 ___

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.

    
___
user529649 11.12.2010 06:32
quelle

Tags und Links