Domanda su normalizzazione
-
12-10-2019 - |
Domanda
Mi chiedo solo quale di questi sarebbe meglio utilizzare in un'applicazione web. Ho una web app che lascia il posto utente al sito. Ci sono tre diversi tipi di messaggi, ma abbastanza simili che ho potuto mettere sotto un tavolo. È che va bene per fare?
ho potuto normalizzare le tabelle in questo modo? (Mettendo tipo sotto o)
Tabella 1
UserPost
post_id
user_id
type
Tabella 2
Post
post_id
datetime
text
O sarebbe utilizzando una tabella di meglio?
Tabella
Post
user_id
post_id
datetime
type
text
Sono appoggiato verso la terza via, a meno che qualcuno può indicare svantaggi.
Soluzione
Nel primo approccio, si avrà sempre a creare una riga in entrambe le tabelle per ogni post utente. Quindi non c'è nessun inconveniente solo avere un tavolo, user_id
dovrebbe quindi essere una chiave esterna per la tabella degli utenti, post_id
la chiave primaria e le altre colonne contengono i dati. Non c'è alcuna ragione per la creazione di due tabelle.
Se i tre diversi tipi di messaggi sono descrivibili da un campo comune, un discriminatore come type
va bene.
Altri suggerimenti
Unire le tabelle, in realtà non c'è vantaggio per rompere loro fuori come avete in Table1 e Table2. Ora, se Tabella 1 dispone di una chiave separata rispetto post_id, si potrebbe eliminare qualche ridondanza. Esempio:
Table 1
UserPost
user_post_id
user_id
type
Table 2
Post
post_id
user_post_id
datetime
text
In base al più recente commento la mia comprensione è che post_id sarebbe una chiave candidata in tutte e tre le tabelle di esempio. Se questo è corretto, allora vi consiglio di creare una tabella per ogni serie unica di attributi (ogni tipo di post). Quindi, se tutti i messaggi hanno gli stessi attributi in comune, allora ha senso averli tutti in un tavolo, ma se ci sono due o tre tipi poi due o tre tavoli sarebbe più appropriato.