Ich arbeite an einer App, die Daten von Smartcards sammelt. Ich möchte die App als Web-Service für mehrere Kundenkonten ausführen können. Die Frage ist, sollte ich für jedes Konto eine separate Datenbank erstellen oder sollte ich eine einzelne Datenbank entwerfen, die alle Daten der Konten enthält? Zuerst dachte ich, dass eine einzige Datenbank die offensichtliche Antwort war, aber es führt dazu, dass überallEinzelne oder separate Datenbanken für separate Kundenkonten?
in dieser App verwendet werden muss ein einzelnes Datenbyte, das zwischen Konten geteilt werden soll.
Zuerst schauen wir uns an, wie eine separate Datenbank für ein Konto aussehen:
CREATE TABLE CardHolder (
CardHolderID int, -- primary key
CardHolderUniqueName nvarchar(30));
CREATE TABLE SmartCard (
SmartCardID int, -- primary key
CardHolderID int,
CardUniqueName nvarchar(30));
einige Einzigartigkeit Einschränkungen hinzufügen, dass
ALTER TABLE CardHolder ADD CONSTRAINT UQ_CardHolderName UNIQUE (CardHolderUniqueName);
ALTER TABLE SmartCard ADD CONSTRAINT UQ_CardName UNIQUE (CardUniqueName);
Nun, wenn ich alles setzen in einer Datenbank Es bedeutet, dass mehrere Konten dieselben Karteninhaber und SmartCards verwalten können, aber die Konten sollten nicht die jeweils anderen Daten sehen. Aus diesem Grund ist eine SmartCard innerhalb eines Kontos einzigartig, jedoch nicht innerhalb der gesamten Datenbank. So muss jede Einschränkung eine AccountID umfassen,
CREATE TABLE CardHolder (
CardHolderID int, -- primary key
CardHolderUniqueName nvarchar(30),
AccountID int);
CREATE TABLE SmartCard (
SmartCardID int, -- primary key
CardHolderID int,
CardUniqueName nvarchar(30)
AccountID int);
ALTER TABLE CardHolder
ADD CONSTRAINT UQ_CardHolderName UNIQUE (AccountID, CardHolderUniqueName);
ALTER TABLE SmartCard
ADD CONSTRAINT UQ_CardName UNIQUE (AccountID, CardUniqueName);
Im eigentlichen DB, wird es viel mehr Tabellen, Spalten und mehrere Indizes (für die Aufnahme in ExpiryDate etc etc) und die AccountID Spalte überall werden muss, enthalten .
Es scheint ein bisschen überladen zu sein, zuerst alle Konten in einer einzigen Datenbank zu setzen und sie dann zu trennen, indem ich eine AccountID-Spalte in jeder Tabelle und fast jeder Einschränkung und Index habe. Ich müsste auch eine Art Sicherheit auf Zeilenebene finden oder erfinden, um Benutzer davon abzuhalten, auf die Daten anderer Konten zuzugreifen. Also, habe ich eine gültige Entschuldigung für die Erstellung einer separaten Datenbank für jedes Konto, oder halten "echte DB-Designer" immer alles in einer einzigen Datenbank?
Als Antwort markiert, weil Ihr Link mir die meisten Informationen gab. Ich kann mich immer noch nicht entscheiden, was ich tun soll. Ich werde anfangen, eine DB für mehrere Mieter zu entwerfen, weil es einfacher ist, das in isolierte DBs zu ändern, wenn ich meine Meinung ändere, als es ist, isolierte DBs in ein DB Design umzugestalten. – Batibix
Dieser Link war wirklich großartig. Ich habe viel gelernt. Es sollte Teil eines Buches über den Bau von Saas sein, das ich wahrscheinlich kaufen würde. – racl101
Ich wünschte wirklich du hast das Fleisch dieses Artikels hier gepostet, denn das ist jetzt eine tote Antwort dank link-rot. –