Ich entwerfe eine Multi-Tenant-SAAS-Enterprise-Cloud-Anwendung.Jeder Mieter muss in der Lage sein, die Benutzeroberfläche und den Workflow seinen Bedürfnissen anzupassen.Tenant kann beliebig viele Felder zur Benutzeroberfläche hinzufügen.Datenbankentwurf und ORM für mandantenfähige SAAS-Anwendung
Wir verwenden single db für jeden Mandanten bedeutet, dass nur ein Mandant Daten in einem einzigen db residiert. Nach dem aktuellen Design, das ich geplant habe, werde ich Mieter mit einer maximalen Anzahl von Feldern in UI beschränken und damit beibehalten können Tabellenentwurfskonstante (Anzahl der Spalten). Die Tabelle hat Varchar-Spalten und Spaltennamen wie Column1, Column2 usw.Tenant-Daten werden in dieser Tabelle gespeichert. Der tatsächliche Name der Spalte und des Datentyps wird in einer Zuordnungstabelle gespeichert.
Die Datenbank ist SQL Azure und ORM ist Entitätsframework.Wenn ein Tenant bereitgestellt wird, werden die Datenbankdetails in einer master-Datenbank gespeichert und von dort wird die Anwendung an mandantenspezifische db umgeleitet.Ich habe diesen Entwurf beibehalten Das Entitätsframework ist eine Multi-Tenant-Anwendung und alle Mandanten haben dieselbe Tabellenstruktur. Daher muss kein EF-Kontext dynamisch neu generiert werden. Es kann nur ein dbcontext verwendet werden, um eine Verbindung zu allen Clients herzustellen von reaseach.
Nun ist das Problem, da alle Felder Varchar mit Aggregatfunktionen sind, Indizierung, Bestellung usw. haben enorme Auswirkungen auf die Leistung.
Momentan sind wir in der Architekturphase und daher haben wir Flexibilität, um das Design zu ändern oder die Technologien zu ändern und auf die NOSQL-Seite zu gehen.
Bitte schlagen Sie vor, wenn es bessere Möglichkeiten gibt oder dies der richtige Weg ist.
Einer der wenigen Artikel, die ich jemals haben, ist https://msdn.microsoft.com/en-us/library/aa479086.aspx#mlttntda_tde