wie diese MySQL-Datenbank entwerfen
-
20-09-2019 - |
Frage
gibt es 2 Millionen Nutzer Jeder Benutzer verfügt über 4 Tabellen. die Daten in 4 Tabellen nicht angehängt werden gehen und bleibt fix.
Die Struktur jeder Benutzer Tabellen werden gleich.
Zum Speichern der Daten dieser Nutzer in mysql muss ich eine Datenbank entwerfen.
benötige ich erstellen 2.000.000 Datenbanken mit jeweils 4 Tabellen?
jede Hilfe dankbar
die 4 Tabellen sind die die
- eingehende Anrufaufzeichnungen des Benutzers für 1 Monat
- incming sms Aufzeichnungen des Benutzers für 1 Monat
- ausgehende Anrufe Aufzeichnungen des Benutzers für 1 Monat
- abgehende SMS Aufzeichnungen des Benutzers für 1 Monat
die Anrufe Tabellen werden folgende Struktur haben
Datum Zeit Anzahl Dauer Gebühren
die eingehende SMS wird folgende Struktur hat
Datum Zeit Nummer
die abgehende SMS wird folgende Struktur
Datum Zeit Anzahl Gebühren
Lösung
Dies ist eine SQL-Antipattern, dass ich nenne Metadaten Tribbles. Sie sehen nett und freundlich, aber bald werden sie mehrfach außer Kontrolle geraten.
Sobald Sie hören Sätze beginnen: „Ich habe eine identische Tabelle per ...“ oder „Ich habe eine identische Spalte per ...“, dann haben Sie wahrscheinlich Metadaten Tribbles.
Sie sollten, indem sie eine Datenbank mit vier Tabellen beginnen, und fügen Sie ein user_id
Attribut zu jedem der vier Tabellen.
Es gibt Ausnahmefälle, wo Sie in separate Datenbanken pro Benutzer teilen wollen würde, aber sie sind Ausnahmen . Gehen Sie nicht dorthin, wenn Sie wissen, was Sie tun und kann beweisen, dass es notwendig sein würde.
Andere Tipps
Die meisten Datenbank-Servern (und Dateisysteme) nicht Instanzen behandeln, die viele einzelne Datenbanken erfordern. Ich vermute, dass das, was Sie tatsächlich vier Tabellen benötigen sind, die jeweils eine Zeile für jeden Benutzer enthält. Das ist eine völlig vernünftige Forderung.
Nein, Sie brauchen nicht zu 2.000.000 Datenbanken mit 4 Tabellen pro Person. Sie müssen nur 1 Datenbank, 4 Tabellen und eindeutige Benutzer-ID für jeden Benutzer.
So etwas wie:
users table:
| user_id (primary key) | username |
address table
| user_id (foreign key) | address |
whatever table
| user_id (foreign key) | whatever |
Ich muss mich fragen, warum Sie benötigen, 4 Tabellen pro Benutzer? Hoffentlich verstehen Sie die Grundlagen dessen, was ich versuche, hier allerdings zu vermitteln.
Sie müssen nur eine Tabelle für Benutzer, Tabelle 1, Tabelle 2, Tabelle 3, Tabelle 4. dann, wenn Sie Daten zu tabelle1 eingeben müssen nur schließen die users_id zu tabelle1
TABLE 1 USERS
ID usersID amount quantity ID Name
1 1 200 2 1 John
2 1 400 3
Sie können die Verbindung dann INNER JOIN mit durch seine table1.usersID = users.ID Alle Tabelle muss UserSid haben (Expect Benutzer-Tabelle, die ID hat), um sie zu verbinden
Hope Sie erhalten den Punkt
Nein, Sie brauchen nicht zu 2.000.000 Datenbanken!
Sie müssen tatsächlich zwei Millionen Instanzen für 4 Tabellen.
Natürlich sollten Sie eine relationale Datenbank gestalten, dass jede Tabelle für andere Tabellen ein relationales Attribut hat.