2010-01-19 7 views
34

Ich habe versucht, einen Fremdschlüssel in einer meiner Tabellen zu erstellen, der auf eine Spalte einer Tabelle in einem anderen Schema verweist.Fremdschlüsselverweis auf Tabelle in einem anderen Schema

So etwas:

ALTER TABLE my_schema.my_table ADD (
    CONSTRAINT my_fk 
    FOREIGN KEY (my_id) 
    REFERENCES other_schema.other_table(other_id) 
) 

Da ich die notwendigen Zuschüsse hatte, dies funktionierte gut.

Jetzt frage ich mich, ob es Gründe gibt, nicht auf Tabellen in einem anderen Schema zu verweisen, oder etwas, um das man vorsichtig sein sollte?

Antwort

32

Keine Probleme dabei. Schemas haben keine Auswirkungen beim Erstellen von Fremdschlüsselbeziehungen zwischen Tabellen. Stellen Sie nur sicher, dass die entsprechenden Personen über die erforderlichen Berechtigungen für die Schemas verfügen, die Sie verwenden möchten.

0

Ein Grund, warum dies zu Problemen führen kann, ist, dass Sie die Dinge in der richtigen Reihenfolge löschen müssen. Dies kann gut oder schlecht sein, abhängig davon, wie wichtig es ist, niemals Waisen in Ihren Tabellen zu haben.

+1

Nun, aber das ist das gleiche beim Referenzieren einer Tabelle in meinem Schema. Recht? –

+0

Ja, es ist das gleiche. Es ist jedoch etwas vorsichtig zu sein –

4

Dies funktioniert genau wie ein Fremdschlüssel, der auf eine Tabelle in einem eigenen Schema verweist. Wie bei regulären Fremdschlüsseln vergessen Sie nicht, my_id zu indizieren, wenn der übergeordnete Schlüssel jemals aktualisiert wird oder wenn Sie Einträge aus der übergeordneten Tabelle löschen (nicht indexierte Fremdschlüssel können eine Quelle für massive Konflikte sein und der Index ist normalerweise nützlich) sowieso).

4

Die einzige Sache, die ich lief, war sicherzustellen, dass die Erlaubnis auf dem anderen Schema existierte. Das übliche Zeug - wenn diese Erlaubnis (en) aus irgendeinem Grund verschwinden, werden Sie davon erfahren.

2

Wenn Sie in einer Organisation arbeiten, in der verschiedene Personen über verschiedene Schemas verfügen, ist es eine gute Übung, dem anderen Schema die Möglichkeit zu geben, Ihre Einschränkung zu deaktivieren oder sogar zu löschen.

Zum Beispiel könnten sie ihre Tabelle löschen oder abschneiden und dann neu laden müssen, um mit einem (sehr seltsamen) Support-Problem umzugehen. Wenn Sie nicht mitten in der Nacht angerufen werden möchten, empfehle ich Ihnen, Ihnen die Möglichkeit zu geben, Ihre Einschränkung vorübergehend zu entfernen. (Ich empfehle auch, eigene Warnmeldungen einzurichten, damit Sie wissen, ob Ihre externen Einschränkungen deaktiviert oder gelöscht werden). Wenn Sie organisatorische/Schema-Linien kreuzen, möchten Sie gut mit anderen spielen. Der Index, den Vincent erwähnte, ist ein weiterer Teil davon.

Verwandte Themen