Sto pianificando un database che conterrà dati per molti progetti / clienti.
I dati per ciascun cliente saranno totalmente indipendenti. Tuttavia avranno tutti la stessa struttura.
Quindi mi chiedo, potrebbe essere utile fare uno schema per ogni cliente (e duplicare le tabelle in esso)?
Per riprendere, rifletto tra le due opzioni:
- utilizzando i join: ogni tabella ha un collegamento alla tabella clienti e, quando eseguono le query, controlliamo che Table.customer_id == current_customer_id
- con schemi: creiamo uno schema per ogni cliente. Su connessione, selezioniamo lo schema. Quindi non dobbiamo preoccuparci di filtrare
La soluzione 1 è più classica. Ma in ogni API, e all'incirca ogni volta che accediamo ai dati, dobbiamo fare un join alla tabella dei clienti.
Poiché utilizziamo SQLAlchemy, non possiamo semplicemente chiamare
Table.query.get(id)
ovunque dobbiamo trasformarlo in
Table.query.filter(Table.id == id).filter(Table.customerId == customerId).first()
L'uso degli schemi renderebbe il codice più semplice ed elegante. Nessun rischio di inviare dati al cliente sbagliato. Tuttavia sembra essere un abuso del concetto di "schema", in quanto ognuno conterrebbe le stesse tabelle. Renderebbe il database più complesso e più difficile da mantenere (le evoluzioni delle tabelle dovrebbero essere eseguite in ogni schema)
Hai qualche idea sulla domanda? Ci sarebbe un'alternativa, permettendoci di selezionare un sottogruppo di dati all'inizio di ogni transazione?
Grazie in anticipo!