come progettare questo database MySQL
-
20-09-2019 - |
Domanda
Ci sono 2 milioni di utenti che ogni utente ha 4 tabelle.i dati nelle 4 tabelle non verranno aggiunti e rimarranno fissi.
la struttura delle tabelle di ciascun utente sarà la stessa.
Per memorizzare i dati di questi utenti in mysql devo progettare un database.
devo creare 2 milioni di database ciascuno con 4 tabelle?
qualsiasi aiuto apprezzato
le 4 tabelle sono le
- record delle chiamate in entrata dell'utente per 1 mese
- record di SMS in entrata dell'utente per 1 mese
- record delle chiamate in uscita dell'utente per 1 mese
- record degli sms in uscita dell'utente per 1 mese
le tabelle delle chiamate avranno la seguente struttura
data ora numero durata addebiti
gli sms in arrivo avranno la seguente struttura
numero data/ora
gli sms in uscita avranno la seguente struttura
addebiti per data e ora
Soluzione
Questo è un antipattern SQL che chiamo Triboli di metadati. Sembrano carini e amichevoli, ma presto si moltiplicano senza controllo.
Non appena senti frasi che iniziano con "Ho una tabella identica per..." o "Ho una colonna identica per...", probabilmente hai Metadata Tribbles.
Dovresti iniziare creando un database con quattro tabelle e aggiungere a user_id
attribuire a ciascuna delle quattro tabelle.
Esistono casi eccezionali in cui vorresti dividere in database separati per utente, ma lo sono eccezioni.Non andarci se non sai cosa stai facendo e puoi dimostrare che sarebbe necessario.
Altri suggerimenti
La maggior parte dei server di database (e filesystem) non gestirà le istanze che richiedono così tanti database separati.Immagino che ciò di cui hai effettivamente bisogno siano quattro tabelle, ciascuna contenente una riga per ciascun utente.Questo è un requisito assolutamente ragionevole.
No, non ti servono 2 milioni di database con 4 tabelle ciascuno.Hai solo bisogno di 1 database, 4 tabelle e un ID utente univoco per ciascun utente.
Qualcosa di simile a:
users table:
| user_id (primary key) | username |
address table
| user_id (foreign key) | address |
whatever table
| user_id (foreign key) | whatever |
Devo chiedermi perché hai bisogno di 4 tabelle per utente?Spero che tu capisca le basi di ciò che sto cercando di trasmettere qui.
Hai solo bisogno di una tabella per gli utenti, table1, table2, table3, table4.quindi, quando devi inserire i dati nella tabella1, includi semplicemente lo users_id nella tabella1
TABLE 1 USERS
ID usersID amount quantity ID Name
1 1 200 2 1 John
2 1 400 3
È possibile connetterti quindi utilizzando il join interno dalla sua tabella1.usersid = utenti.id tutta la tabella deve avere utenti ID (aspettatevi che la tabella degli utenti che abbia ID) per collegarli
Spero che tu abbia capito il punto
No, non ti servono 2 milioni di database!
In realtà hai bisogno di 2 milioni di istanze per 4 tabelle.
Naturalmente, dovresti progettare un database relazionale in modo tale che ogni tabella abbia un attributo relazionale per le altre tabelle.