Was ist der beste path, um database in ONE CMS / MULTIPLE WEBSITE System zu verwalten

Ich entwickle Content Management System (CMS). Aber das anders als andere CMS. Ich kann ein CMS pflegen und Inhalte auf mehrere Websites definieren. Wie ein Blog. Aber einige Website hat verschiedene Tische.

Mein aktuelles CMS hat eine database (MS SQL 2005)

database enthält viele Tische:

Haupttabellen

  • Benutzer
  • Seite
  • modulee
  • Portale
    etc…

Web 1 Tische

  • web1Post
  • web1CustomTable
  • web1Table2 etc …

Web 2 Tische

  • web2Customtable3
  • web2CustomTable4
  • web2Table4 etc …

Jeder benutzerdefinierte Tafel trat User, Portal und andere einige Tabellen bei. Das ist erfolgreich funktioniert.

Aber ich möchte database zu MainDatabase, web1database, web2database etc … trennen

Ich versuche, die database zu trennen. Aber Problem ist Benutzer, Portal und verbundene Tabellen hat Problem

Ich benutze EntityFramework, Asp.net MVC

Was ist der beste path, dies zu lösen?

Es gibt keinen "besten" path, dies zu lösen. Trennen Sie einfach die databaseen und beginnen Sie dann mit der Bearbeitung des Codes in Ihrer Anwendung.

Das müsst du

  • Erstellen von Entity-Framework-Zuordnungen für neue databaseen
  • Code aktualisieren und Verweise auf vorhandene database entfernen
  • füge neuen Code mit Verweisen auf neue databaseen hinzu

Allerdings würde ich empfehlen, dass Sie nicht trennen Sie die databaseen, sondern Änderungen in Ihrem bestehenden Schema, um Anpassungen zu unterstützen. Vielleicht können Sie xml-Spalten verwenden, um benutzerdefinierte data zu speichern oder sogar Ihre Anwendungsschicht zu erstellen, damit sie die databasestruktur dynamisch aktualisieren kann. Dies ist, wie TFS und Dynamics CRM Handhabungen anpassen – sie haben ein Hauptschema in database und Metadaten-Shcema, das Informationen über Anpassungen speichert.

Laden und installieren Sie das Kentico CMS und erkunden Sie, wie es dieses Problem anpackt. Wenn Sie eine Multi-Tenant-database haben wollen, definieren / replizieren Sie ein anderes Schema für jeden Mieter / Website.

Sie können ein Problem der verwandten Tabellen aus verschiedenen databaseen nicht lösen. Erstellen Sie nicht die database für einzelne Websites, so dass SharePoint keine databaseen für Unterwebs erstellt. Erstellen Sie einfach einen Fremdschlüssel in jeder Tabelle von Unterweb, zB SubwebId. Wenn Sie sich entscheiden, separate databaseen zu haben, müssen Sie eine gespeicherte Prozedur für die Generierung einer Unterweb-database, Methode zum Erstellen einer Website unter IIS (auch bind Domain zu einem Unterweb bind), Methode zur Erstellung von Site-fileen aus einer Vorlage zu erstellen indem alle Verbindungszeichenfolgen ersetzt werden. Willst du das wirklich machen? Ich denke, das ist keine gute Idee. (Sory für schlechtes Englisch)

Von Ihrer Beschreibung so weit, es fühlt sich an wie Sie haben eine CMS-database und mehrere verwandte Websites. Sie könnten SCHEMAs verwenden, um die data für die einzelnen Seiten zu trennen. So könntest du das [dbo] Schema für die Tabellen verwenden, die sich auf alle Seiten beziehen. Und dann [website1] für die Tabellen, die spezifisch für website1 und so weiter sind.

Einzelne databaseen sollten meist unabhängig voneinander sein. ACID funktioniert nicht immer über databaseen. Einzelne databaseen haben separate Backup-timeen. Jede database konnte auf einen anderen server verschoben werden. Jede database könnte sich in einem anderen Zustand befinden. Sie können nicht eine gute, saubere, zuverlässige Fremdschlüsselbeziehung zwischen databaseen haben. Solange Sie eine Abhängigkeit zwischen [User] und anderen Tabellen benötigen, müssen diese anderen Tabellen im selben db sein.