Applicazione Web con database relazionale - best practice?

2

Attualmente sto progettando un'applicazione web che è abbastanza simile a Twitter ma con alcune caratteristiche uniche per la mia azienda. Le tecnologie sono Vue2, Spark framework e PostgreSQL .

Sto cercando di decidere come progettare l'ER e come integrare il lato client con la mia API. Lasciami abbattere il problema.

Questi sono i dettagli di un "tweet" che è il componente principale dell'applicazione:
Id,
Timestamp,
Tipo di messaggio (da un'altra tabella),
TaggedPeople (un elenco di ID utente da un'altra tabella),
Testo,
Stato (dalla tabella antoher),
Mi piace (Un elenco di ID utente da un'altra tabella),
Dati aggiuntivi (in base al tipo di post)

Devo mostrare un sacco di questi tweet nel mio feed, aggiungere / aggiornare / eliminare i tweet e filtrare i tweet in base a parametri diversi.

Attualmente sono diviso tra 3 opzioni:

  • Partecipa alla query con altre tabelle (tipi, utenti e stati).
  • Denormalizzare tutte le chiavi esterne in una colonna JSONB (sto usando PostgreSQL).
  • Restituzione dei dati con i tasti e "unione" del testo effettivo nel lato client - utilizzando i dati precaricati in Vuex (uno strumento di gestione stato in Vue).

Sarà molto bello ascoltare qualcuno che ha esperienza con questo tipo di applicazioni web.

Grazie in anticipo.

    
posta JacobKreynin 23.08.2018 - 20:25
fonte

1 risposta

1

Devi separare il modello, la vista e il controller.

Per il livello del database (modello), vorrei creare classi per Tweet e People. Crea una tabella di join per Tag (due colonne, tweetId e userId) e un'altra per Mi piace (ancora, due colonne per tweetId e userId). Cose come il tipo di post e lo stato potrebbero non aver bisogno di un'altra tabella dato che sono solo valori di ricerca.
Le cose che devi ordinare e filtrare sono le migliori se separate nella loro colonna in modo da poterle cercare nel database senza dover analizzare o indicizzare i "dati aggiuntivi". Di solito, le chiamate al database sono quelle in cui dovresti essere ottimizzato e ridimensionato al meglio. Non limitarti a sbattere tutto in una colonna e analizzarlo sul client, quando puoi sfruttare anche la potenza del database.

Quindi, quando carichi i dati nella tua applicazione (controller / vista), puoi passare e unirli in giro come preferisci, come usare una mappa con valori chiave. Dipende solo dalla tua struttura preferita.

    
risposta data 24.08.2018 - 18:41
fonte