Sfondo
Ho un'applicazione che memorizza molte entità in un database relazionale classico (Microsoft SQL Server) e utilizzo un ORM (Entity Framework) per interrogare i dati da esso. Questo database ha uno schema non esiste solo una "vista globale" per questi dati. I dati sono resi disponibili agli utenti tramite un'API OData.
Per semplicità diciamo che è un sistema di blog con le tabelle Posts
, Comments
, Tags
, Users
. La relazione esatta tra loro non è così importante per ora.
Domanda
Con la prossima versione dell'applicazione vorremmo gestire più blog all'interno di un'installazione software. Tutti i blog con i loro contenuti sono indipendenti gli uni dagli altri e gestiti da utenti diversi.
Come si può eseguire una tale estensione del software?
La soluzione più ovvia al problema mi sembra rendere la parte di separazione del modello di dati. Ciò richiederebbe di introdurre un'entità contenitore e lasciare che tutte le altre entità puntino tramite FK al contenitore a cui appartengono. Quindi nell'applicazione tutte le query devono essere estese da un filtro per caricare solo i dati per il contenitore corrente .
Come puoi immaginare, questo richiede un grande sforzo di sviluppo. Ogni query deve specificare correttamente questo filtro e, in caso contrario, potrebbero essere visualizzati dati provenienti da blog errati. Anche i vincoli univoci devono essere rielaborati per essere unici per contenitore.
Un'altra idea era di creare anche 1 database per container e connettersi al DB corrispondente a seconda del contenitore a cui si accede. Anche l'impegno di manutenzione dietro a questo mi sembra un po 'complesso.
Ci sono forse altre soluzioni tecniche a questa domanda?
Purtroppo mi mancano i termini corretti per fare una ricerca adeguata su questo argomento. La cosa migliore che posso sperare è una funzionalità di SQL Server che consente di archiviare più "set" di dati nello stesso schema di database con una separazione rigorosa.