2015-02-10 7 views
6

Ich versuche, die Dynamo DB zu verwenden. Ich versuche, die Dynamo DB-Tabellen zu testen, aber ich kann hier keinen Fremdschlüssel erhalten.Wie weisen Sie Fremdschlüssel in DynamoDB zu?

+0

Was genau meinst du? DynamoDB ist keine relationale Datenbank. Sie sollten sagen, was Ihr tatsächliches Problem ist, anstatt nach einer spezifischen Lösung zu fragen. Außerdem fügen Ihre obigen Kommentare der Konversation nichts hinzu. – mkobit

+0

Sollen wir Fremdschlüssel in Dynamo DB definieren? –

+0

Fremdschlüssel wie in SQL Server. –

Antwort

7

DynamoDB hat keine Fremdschlüssel. Es ist eine NoSQL-Datenbank, die diese Art von relationalen Daten nicht unterstützt. Da zwischen den Tabellen keine Datenintegrität besteht, ist diese Art von Verhalten nicht integriert. Wenn Sie ein solches Verhalten wünschen, müssen Sie Ihren Datenspeicher in DynamoDB auf andere Weise modellieren.

Vom FAQ zu erklären, dass es ist nicht eine relationale Datenbank:

Während Amazon DynamoDB die Kernprobleme der Datenbank Skalierbarkeit angeht, Management, Leistung und Zuverlässigkeit, ist es nicht haben alle Funktionalität einer relationalen Datenbank. Es unterstützt nicht komplexe relationale Abfragen (z. B. Joins) oder komplexe Transaktionen . Wenn Ihre Arbeitslast diese Funktionalität erfordert oder Sie die Kompatibilität mit einer vorhandenen relationalen Engine suchen, können Sie eine relationale Engine auf Amazon RDS oder Amazon EC2 ausführen. Während relationale Datenbank-Engines robuste Funktionen und Funktionen bieten, ist die Skalierung einer Arbeitslast über eine einzige relationale Datenbankinstanz hinweg sehr komplex und erfordert viel Zeit und Fachwissen.

+0

entlang dieser Ader der Frage - ist es immer eine gute Idee, den Hash-Schlüssel einer anderen Tabelle zu verwenden, sagen 'Users.id', in einer anderen Tabelle, sagen' Payments.id', so können Sie direkt suchen 'Payments.id = = Users.id', um einen Fremdschlüssel wie das Mapping in Dynamo zu erstellen und direkte Abfragen zuzulassen? Das einzige, was ich sehen kann, ist, dass es nicht selbst dokumentiert, es sei denn, Sie nennen es Payments.userId und legen Sie als Hash-Schlüssel, aber Sie verlieren Konsistenz über alle Ihre DB bei der Benennung von Hash-Schlüssel-Indizes wie Payments.Id, Benutzer. ID, Wallet, ID, etc. – anon58192932

+1

Ich habe gerade festgestellt, dass Sie Fremdschlüsselnähnliche Beziehungen mit globalen Sekundärindizes erhalten können und wenn Sie einen sortierten Fremdschlüssel benötigen, um das Scannen und Filtern zu verhindern, können Sie dem globalen einen Bereichsschlüssel hinzufügen Sekundärindex. Dies sollte Ihnen erlauben, immer noch eindeutige IDs für jede einzelne Tabelle zu pflegen, während Sie immer noch einen Fremdschlüssel wie die Abfragefähigkeit hinzufügen und auch den besten Teil über Bereichsschlüssel beibehalten, was automatische Vergleichsoperationen wie>, <, <=, > = und! =. – anon58192932