Se una delle considerazioni chiave relative alla progettazione è la sicurezza, in particolare, un client non può in alcun modo no come quando accede ai dati di un altro cliente, quindi, a seconda su come si implementa questa sicurezza, potrebbe essere necessario incollare la colonna di qualificazione in ogni tabella. Una di queste tattiche descritte con here richiede la creazione di una vista su ogni tabella; supponendo che ogni tabella contenga una colonna tenantId, se opportunamente configurata ogni vista potrebbe contenere una clausola "WHERE tenantId = SUSER_SID()" (e ovviamente si configura il database in modo che i client possano accedere solo alle viste).
Un altro fattore (come nel mio lavoro corrente) è il caricamento dei dati di magazzino (ETL). Le tabelle sono partizionate su tenantId (usiamo il partizionamento delle tabelle, ma anche le viste partizionate funzionerebbero) ei dati possono essere facilmente caricati o scaricati per un client senza incidere seriamente su nessun altro client.
Ma come sempre, c'è un sacco di "dipende" coinvolti. Se non c'è una necessità chiara e presente, e una probabilità molto bassa di necessità futura, quindi normalizzare quella colonna. Basta rendersi conto che è più un dispositivo di implementazione fisica che di progettazione di database concettuale o logica.
fonte
2009-11-16 15:36:41
Ci sono considerazioni sulla progettazione di database multi-tenant, leggere su un articolo MSDN: [Multi-Tenant Data Architecture] (http://msdn.microsoft.com/en-us/library/aa479086.aspx) In breve ci sono diversi approcci, ed è un continuum di scelte e conseguenze. Prendere una decisione informata in base ai requisiti. –