App web Django: come salvare migliaia di variabili per utente

1

Esiste un sito web guidato da Django in cui l'utente accede e può rispondere a migliaia di domande. Voglio salvare in modo persistente se un determinato utente ha risposto a una determinata domanda oppure no.

Il mio approccio finora è che la tabella User abbia migliaia di colonne nel database PostgreSQL: una colonna per ogni domanda contenente 0 se la domanda non è stata ancora risolta e 1 se lo è. Tuttavia, in PostgreSQL c'è un limite di 1.600 colonne, che non ho ancora raggiunto, ma che alla fine raggiungerò, quindi questo approccio non funzionerà.

Che cos'è un'architettura alternativa valida per salvare in modo persistente migliaia di variabili per ciascun utente?

    
posta M3RS 16.10.2017 - 11:29
fonte

3 risposte

8

L'utilizzo di una colonna per domanda rende più difficile aggiungere più domande in un secondo momento.

Invece, modella la relazione tra utenti e domande nella tua tabella. Cioè le domande sono codificate esplicitamente come dati, non implicitamente nella struttura della tabella.

La tabella avrebbe colonne user_id e question_id, probabilmente entrambe con vincoli di chiave esterna a un'altra tabella. Queste due colonne sono una chiave composta per la tabella delle risposte. La tabella può avere colonne aggiuntive per memorizzare le risposte. Se stai monitorando solo se la domanda ha avuto risposta, il controllo dell'esistenza di un particolare record (user, question) potrebbe essere sufficiente, non sono necessarie ulteriori colonne.

    
risposta data 16.10.2017 - 11:44
fonte
5

Dovresti normalizzare lo schema del tuo database. Ciò significa che invece di avere solo una tabella Utente, avresti anche una tabella Domande contenente le informazioni su ogni domanda, quindi avresti anche una tabella di link Answers dove ogni riga rappresenta un particolare utente che risponde a una particolare domanda.

    
risposta data 16.10.2017 - 11:44
fonte
1

My approach so far is for the User table to have thousands of columns in the PostgreSQL database - a column for each question

Modello di dati non validi. Non puoi scrivere nessun tipo di query significativa contro di essa.

Database relazionali love per fare cose con righe ; non sono molto bravi a chiacchierare con columns .

Normalizza i tuoi dati, creando una nuova tabella con una riga per utente & risposta combinazione di domande: se nessuna riga esiste, non hanno risposto a questa domanda.

    
risposta data 17.10.2017 - 11:17
fonte

Leggi altre domande sui tag