1

Ich habe 2 Tabellen, Benutzer (~ 1000 Benutzer) und Land (~ 50 Länder). Ein Benutzer kann viele Länder unterstützen, daher plane ich, eine Zuordnungstabelle, user_country, zu erstellen. Da ich jedoch 1000 Benutzer und 50 Länder habe, werde ich für diese Tabelle maximal 50000 Einträge haben. Ist dies der beste Weg dies umzusetzen oder gibt es dafür eine geeignetere Methode?Die beste Methode zum Implementieren von Viele-zu-Viele-Beziehungen in MySQL

Wenn dies der beste Weg ist, wie kann ich einen Benutzer, der viele Länder unterstützt, mit nur einer SQL-Anweisung zu dieser Tabelle hinzufügen? Für Ex:

INSERT INTO user_country(userid, countrycode) 
VALUES ('user001','US'), 
('user001','PH'), 
('user001','KR'), 
('user001','JP') 

Über SQL-Anweisung zu lang sein, wenn ein Benutzer alle 50 Ländern unterstützt. Und ich muss es für 1000 Benutzer tun. Hat jeder Ideen den effizientesten Weg dies umzusetzen?

+0

[Optimales Viele-zu-Viele-Schema] (http://mysql.rjweb.org/doc.php/index_cookbook_mysql#many_to_many_mapping_table). Optimaler 'country_code':' CHAR (2) CHARACTER SET ascii'. –

Antwort

0

Persönlich würde ich den Einsatz tun basiert auf einer select:

INSERT INTO user_country SELECT 'user001', countryid from countries WHERE countryid IN ('US', 'PH', 'KR', 'JP'); 

Sie müssen Ihre Spaltennamen anzupassen.

Die Alternative zum Speichern von Länderlisten in einer einzigen Spalte usercountries varchar (255) als US, FR, KR usw. wäre ebenfalls möglich - aber Sie würden die Möglichkeit verlieren, Benutzer basierend auf dem Land auszuwählen, das sie unterstützen. Tatsächlich verlieren Sie es nicht - aber

SELECT * FROM users WHERE usercountries like '%KR%'; 

Ist keine gute Abfrage in Bezug auf die Indexnutzung. Aber da Sie nur 1000 Benutzer haben, wird auch ein Table-Scan mächtig schnell sein.

+0

Danke. Das habe ich gebraucht. – dats

1

Vom Standpunkt des Datenbankentwurfs ist eine Tabelle wie Ihre user_country der einzig vernünftige Weg zu gehen. 50000 Datensätze sind für MySQL ein Kinderspiel, und wenn sie zusammen mit den entsprechenden Indizes verfügbar sind, werden alle Möglichkeiten für zukünftige Verwendung dieser Daten eröffnet.

Soweit ich sehen kann, hat dies nichts mit dem Problem vieler großer SQL-Insert-Anweisungen zu tun. Unabhängig davon, wie Sie die Daten in der Datenbank darstellen, müssen Sie Anweisungen schreiben, die für jeden Benutzer eine Liste von Ländern enthalten.

Dies ist eine einmalige Aktion, oder? Es muss also kein Meisterstück der Softwareentwicklung sein. Manchmal lade ich die Rohdaten zeilenweise in Excel und schreibe dann eine Formel, die die entsprechende SQL-Anweisung für die erste Zeile berechnet und diese Formel für alle Zeilen kopiert. Dann werfen Sie alle diese Anweisungen in die Datenbank. Selbst wenn es Zehntausende von ihnen gibt, ist es nicht viel Aufwand.

Verwandte Themen