Frage

Wie Datenbank entwerfen und Daten organisieren, wenn ich zwei oder mehr Domänen und eine Datenbank? Alle Websites für E-Commerce-Zwecke und eine gute kann auf jeder Website zum Verkauf angeboten werden. Also ich habe nur zwei Ideen:

  1. Ich brauche ein weiteres Feld (site_id) in fast jeder Tabelle zu erstellen und doppelte Daten.
  2. Ich brauche eine Tabelle mit site_id Informationen erstellen für alle anderen Felder aus anderen Tabellen.

Beiden Ideen haben einen riesigen Nachteil. Irgendwelche Ideen? Danke.

War es hilfreich?

Lösung

Es ist wahrscheinlich, dass es eine kleine Handvoll Tische irgendwo in Ihrem Schema ist, die alle Ihre anderen Tabellen verknüpfen. Es ist diese Tabellen, dass Sie die site_id die in setzen müssen, nicht jede Tabelle in der Datenbank.

(ein hoch erfundenes) Beispiel, wenn mein Schema eine Tabelle Kunden enthält, eine Rechnungstabelle und eine Rechnungsposition Tabelle, ich brauche nicht site_id die in allen drei Tabellen. Ich brauche nur eine site_id in der Tabelle des Kunden.

Andere Tipps

Dies ist ein klassisches Problem bei der Multi-Tenant-Systeme zu bauen. Ich habe ein paar unterschiedliche Meinungen zu diesem Thema gehört, aber sie im Grunde brechen in zwei Lager:

  1. Mit der Mieter id (site_id in Ihrem Fall) auf jedem Tisch, die Daten für einen bestimmten Mieter enthält. Die Befürworter dieses Ansatzes zitieren Leichtigkeit die Mieter zu identifizieren, dass die Daten gehören als Hauptvorteil mit Auswirkungen darauf, wie die Daten archiviert (viz. Verschiedene Tablespaces für verschiedene Kunden).

  2. Mit dem Mieter-ID nur auf High-Level-Tabellen. Die Befürworter dieses Ansatzes beschreiben in der Regel die Vorteile eine sauberere Datenbankstruktur zu sein.

I'n kein Fan von verschiedenen physikalischen Tabellen für die gleiche Art von Daten aus unterschiedlichen Kunden zu schaffen. Es gibt eine Reihe von ungünstigen Auswirkungen auf diese:

  • Es wird schwierig, ein kohärentes Objektmodell über ein ORM-Tool
  • erstellen
  • Dieser Ansatz skaliert nicht gut mit einer großen Anzahl von Kunden -. Wenn Sie 70.000 Kunden haben, die von einer einzigen Datenbank bedient werden müssen, werden Sie 70.000 Sätze von Tabellen
  • Tabellennamen müssen dynamisch für SQL-Anweisungen erzeugt werden.

Ich denke, einer der Ansätze, die von Wordpress und Drupal ist Tabellen Präfix mit einem Namen:

dom1_Customers
dom2_Customers

Auf diese Weise der Tabellen nicht außer Verhältnis wachsen und Sie müssen keine zusätzlichen Index von site_id zu halten. Das heißt, Ihr Code hat für sie zu kompensieren, was einige reinstrumentation erfordern können (und gespeicherte Prozeduren sind im Grunde aus ohne eine gewisse Bösartigkeit).

Meine Präferenz ist Mapping-Tabellen zu erstellen, wo nötig. Denken Sie, dass ein Produkt für Standort 1 bestehen kann, Seite 2, etc. Die Produktdetails über die Websites nicht ändern. Die Produkte Preis könnte aber! In diesem Fall wird die Preise Tabelle könnte die SiteID und die ProductID müssen, wo ProductID für jeden Eintrag in den verschiedenen Standorten repliziert werden können. Dies könnte für die Nutzer sagen, auch außer, dass die Nutzer finden diese „große Bruder“ in Gefühl zu sein. So, während dies für die Kunden arbeiten könnte ich vorschlagen, im Allgemeinen, dass die Kunden über verschiedene Standorte unterschiedliche Konten haben! Manchmal, was physisch Arbeit bedeutet nicht, dass es logisch funktioniert. Setzen Sie den SiteID, wo man es eher brauchen als nur wahllos es allenthalben setzen. Denken Sie daran, dass Sie diese SiteID müssen an Orten, darüber hinaus, wo Sie Anwendung braucht es ... darüber nachdenken, offline zu abfragt. Mit 5 zu tun, schließt sich durch die SiteID filtern saugen! die Indizes zu erhalten ist besser, als für die Filter zu jagen!

Im Hinblick auf die horizontale Unterteilung durch getrennte Tabellen mit ähnlichen Namen ... Verwendung von SQL Server 2005 und höher. Es verfügt über Funktionen für die Partitionierung, so dass über die Datengröße besorgniserregend ist kein Thema mehr.

Ist Multi-Datenbank nicht in Frage? Es scheint die einfachste und sauberste zu sein, kann man nicht möglicherweise Chaos ein tennants Daten mit einem anderen eigenen .. Sie sind Gonna Notwendigkeit einer Master-Datenbank für Mieter Infos und ein db für jeden Tennant.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top