Mysql
 sql >> Database >  >> RDS >> Mysql

Tabelle di database dinamiche in django

Una domanda interessante, che potrebbe essere di più ampio interesse.

La creazione di una tabella per utente è un incubo di manutenzione. Dovresti invece definire una singola tabella per contenere i dati di tutti gli utenti, quindi utilizzare le capacità del database per recuperare solo le righe relative all'utente di interesse (dopo aver verificato le autorizzazioni, se necessario, poiché non è una buona idea fornire a qualsiasi utente illimitato accedere ai dati di un altro utente senza che siano state impostate autorizzazioni specifiche).

L'adozione della soluzione proposta richiede la creazione di istruzioni SQL contenenti il ​​nome della tabella dell'utente pertinente. Le query successive al database saranno per lo più diverse, e questo rallenterà il lavoro perché ogni istruzione SQL deve essere "preparata" (è necessario verificare la sintassi, verificare i nomi delle tabelle e delle colonne, l'autorizzazione dell'utente richiedente per accedere alle risorse nominate è necessario essere autorizzati, e così via).

Utilizzando un'unica tabella (modello) le stesse query possono essere utilizzate ripetutamente, con parametri utilizzati per variare valori di dati specifici (in questo caso il nome dell'utente di cui si stanno cercando i dati). Il tuo lavoro sul database procederà più velocemente, ti servirà un solo modello per descrivere i dati di tutti gli utenti e la gestione del database non sarà un incubo.

Un ulteriore vantaggio è che Django (che sembra che tu stia utilizzando) ha un ampio modello di autorizzazione basato sull'utente e può essere facilmente utilizzato per autenticare l'accesso dell'utente (una volta che sai come). Questi vantaggi sono così convincenti che spero che tu rinunci alla tua eresia e decida che puoi farla franca con un unico tavolo (e, se hai intenzione di utilizzare gli accessi Django standard, una relazione con il modello Utente che è una parte centrale di qualsiasi Django progetto).

Sentiti libero di porre altre domande mentre procedi. Sembra che tu sia nuovo nel lavoro con i database, quindi ho cercato di presentare un livello di dettaglio appropriato. Ci sono molte insidie ​​come questa se non puoi accedere a consigli ben informati. Le persone su SO ti aiuteranno.