Ich bin größtenteils ein Anwendungsentwickler, muss aber die gesamte Vorab -Datenbankarbeit für mein aktuelles Projekt erledigen ( übrigens seinen MS SQL Server 2008 ). Als erste Entscheidung versuche ich herauszufinden, ob ich meinen Status mithilfe separater Datenbanken oder mithilfe separater Schemas in derselben Datenbank aufteilen soll. Ich habe ein wenig über SQL Server-Schemas gelesen und es scheint eine natürliche Möglichkeit zu sein, Objektdomänen ( die mir gefallen ) zu trennen , aber ich bin mir nicht sicher, ob dieses Muster versteckte Kosten verursachen kann.
Was sind die praktischeren Dinge, die ich bei der Auswahl zwischen diesen beiden Ansätzen berücksichtigen sollte? Wenn ich vermeiden , die dbo.mytable
zu Gunsten der myschema.mytable
ich andere Herausforderungen (erschaffen oder Probleme ) für meine Architektur?
Als Randnotiz ... Irgendwann wird dies an einen echten Datenbankadministrator übergeben, um ihn zu unterhalten / zu unterstützen, also versuche ich sicherzustellen, dass ich ihnen das Leben nicht erschwere.
quelle
Antworten:
Zunächst möchte ich sagen, dass Schemas nicht als Namespaces oder Objektdomänen im Sinne von OO betrachtet werden. Schemata sind im Wesentlichen Berechtigungscontainer mit einem gewissen Mehrwert (siehe unten).
Auch "separate Schemata" oder "separate Datenbanken" sind zwei unterschiedliche Konzepte. Daten, die transaktionell und referenziell konsistent sein müssen, müssen sich in derselben Datenbank befinden. Siehe Eine Datenbank oder zehn? Blog-Artikel für mehr.
In dieser Datenbank können Sie Schemata zum Organisieren Ihrer Objekte verwenden oder auch nicht.
Persönlich bin ich ein Fan von Schemata und benutze sie immer, aber für Dinge wie Berechtigungen und logische Gruppierung. Dazu verweise ich Sie auf frühere Fragen, bei denen Sie sehen, dass die allgemeine Meinung für sie spricht:
Informationen zu separaten Datenbanken finden Sie in der Antwort von Aaron. Dies alles hängt jedoch von der Anforderung "Transaktions- und referenziell konsistent" ab.
quelle
Stimmen Sie mit @gbn überein. Ich habe Lösungen mit Schemata für die Trennung und Datenbanken für die Trennung entworfen und finde, dass die Verwendung von Datenbanken viel praktischer ist. Ein paar Gründe:
<schema>
vor allen Objektreferenzen eingefügt werden. Dies bietet sich entweder für viele dynamische SQL-Vorgänge an, für viele verschiedene Anwendungsanmeldungen mit Standardschemata (dh Ihr Code würde kein Schemapräfix verwenden und sich auf das Standardschema des Anwendungsbenutzers stützen - dies kann zu einer massiven Auslastung des Plan-Cache und zu schwierigem Debugging führen). oder viele gespeicherte Prozeduren, die verwaltet werden müssen (stellen Sie sich nur einen einfachen Bericht vor, wenn Sie einen pro Schema benötigen, dann ändert sich der Code, jetzt müssen Sie den gleichen Code mehrmals ändern, einmal für jedes Schema).quelle