Ho problemi a trovare un nome per questo problema, ma mi sento come se fosse stato risolto prima. Penso che la mia ingenuità mi impedisca di digitare le parole giuste in Google per ottenere i risultati di cui ho bisogno. Quindi mi scuso in anticipo se questa domanda è stata posta prima.
In ogni caso ...
Sto progettando un'applicazione web multi-tenant in cui la struttura dei dati dipende dal locatario. Un inquilino in questo caso è un'azienda che vuole utilizzare i nostri servizi e un utente è un individuo che lavora per una di quelle attività. Il sistema è tutto in un unico posto, dato che in questo c'è un sito Web a cui tutti gli utenti si collegano, a seconda dell'indirizzo e-mail che digitano, l'affittuario a cui sono assegnati viene deciso automaticamente al momento della registrazione (non sono sicuro se questo è il modo giusto per andare su questo).
Ogni inquilino vuole memorizzare informazioni sulle persone che lavorano per loro sul nostro sistema. Queste persone non sono necessariamente utenti e, cosa più importante, queste informazioni sulle persone sono utilizzate in altre parti del sito web che potrebbero essere più generali.
Ecco il problema: ogni inquilino potrebbe voler memorizzare informazioni diverse sulla propria gente. Ad esempio, il Tenant A vuole memorizzare Nome, Email, Telefono e Indirizzo, ma il Tenant B vuole Nome negozio, Email, un'immagine della persona e il loro cibo preferito (non so).
Utilizziamo SQL Server per archiviare i nostri dati. Il mio istinto è quello di creare un tavolo diverso per ogni inquilino, ma prevedo che le cose diventeranno sempre più sicure con l'aumento del numero di inquilini. Se avessimo 5 inquilini, certi tavoli individuali avrebbero funzionato ... ma cosa accadrebbe se avessimo 500 inquilini? Avremmo bisogno di avere 500 tabelle solo per tutte le persone sulle quali archiviamo le informazioni? Ma peggiora. Le diverse informazioni non riguardano solo le persone di ciascun inquilino; gli inquilini potrebbero desiderarci di memorizzare informazioni diverse per altri servizi che offriamo loro.
È possibile generalizzare in qualche modo questa struttura di dati variabile? C'è qualcuno là fuori che ha già trattato qualcosa del genere?