Ist es eine schlechte Idee, für große Anwendungen Fremdschlüssel in den Tabellen in einem anderen Schema in derselben Datenbank zu erstellen?

13

Ich arbeite an der Übertragung einer großen webbasierten pl / sql-Anwendung auf den dedizierten Server. Diese Anwendung befindet sich in einem Schema mit 70 Paketen Programmcode. Dieser Antrag wurde ca. 15 Personen zu unterschiedlichen Zeiten gestellt. Es war für uns üblich, Fremdschlüssel in den Referenztabellen in verschiedenen Schemata zu erstellen, da dies sehr praktisch ist und die Datenbank sehr sauber hält, da wir nicht dieselben Referenztabellen in verschiedenen Schemata aufbewahren müssen.

Mein DBA (der eine neue Instanz mit DB erstellt und meine Anwendung innerhalb der Solaris-Zone kopiert hat) sagte jedoch heute sehr hart: "Fremdschlüssel in den verschiedenen Schemata sind böse und müssen zerstört werden!". Er hat seinen Standpunkt nicht erklärt.

Ist es wirklich eine schlechte Idee, dies mit großen Anwendungen zu tun?

Alexander Myshov
quelle
13
Ihr DBA sollte entlassen werden.
Colin 't Hart
1
Wir werden alle schreien, dass Ihr DBA ein Idiot ist, wenn das alles ist, was sie gesagt haben, aber sind Sie sicher, dass das Argument Ihres DBAs keinen anderen Kontext hat?
Kermit
1
Vielleicht tut der DBA einfach alles, um die lächerliche Arbeit der Entwickler bei der Konstruktion dieser Sache zu unterstützen.
Swasheck
2
@swasheck Auf der anderen Seite, haben Sie seinen Job haben wollen , nachdem die Datenbank mehrere Jahre von Inkonsistenzen unter diesem DBA angesammelt hat?
Twinkles
@ Twinkles überhaupt nicht
Swasheck

Antworten:

6

Bearwith me - Ich komme aus SQL Server und hasse Orakel, aber ich denke, die Argumentation steht noch.

Schemata sind nett, um Tabellen von logischen Subsystemen zu isolieren. Fremdschlüssel gewährleisten die Datenintegrität. Hierbei handelt es sich um orthogonale Konzepte, da natürlich auch die Datenintegrität zwischen Subsystemen ein Muss ist. Buchhaltung und Versand und möglicherweise zentrale Kundendaten befinden sich nicht in Silos, in denen ein Kunde gelöscht werden kann, während er in der Buchhaltung verwendet wird.

Als solches denke ich, dass die Anforderung des DBA ein Zeichen der Inkompetenz ist. Bitte kann jeder einspringen und Gegenargumente vorbringen - ich würde mich freuen. Aber so mache ich es auf SQL Server (obwohl unsere Definition des Schemas IIRC ein KLEINES ist, das sich von der Oracle-Definition unterscheidet).

TomTom
quelle
4

Die Vernichtung von Fremdschlüsseleinschränkungen ohne detaillierte Begründung zu fordern, ist zwar töricht, aber es ist sinnvoll, die externen Referenzen unter Kontrolle zu halten. Was ist, wenn die Schemas, auf die Sie verweisen, auf Ihrem neuen Server einen anderen Namen haben?

In Oracle lösen Sie dieses Problem, indem Sie SYNONYMS für Objekte erstellen, die außerhalb des aktuellen Schemas liegen.

Funkelt
quelle
1
Sie können Synonyme überbeanspruchen und die Frage "worauf bezieht sich das?" Weitere Informationen zu Sicherheit, Leistung und Best Practices finden Sie hier stackoverflow.com/a/10042117/851930
kevinsky
3
Synonyme können nicht als Ziel von Fremdschlüsseleinschränkungen verwendet werden.
Colin 't Hart
Gültige Punkte. Und ein weiterer Beweis dafür, dass es schlecht ist, Aussagen zu machen, ohne anderen die Möglichkeit zu geben, über die Verdienste und Gefahren zu diskutieren.
Twinkles
2

Wenn Sie ein Schema (Speicherplatz / Sicherheit / was auch immer) in eine andere Datenbank verschieben müssen, können Sie die Verweise nicht mehr verarbeiten. Dies ist wahrscheinlich der Hauptgrund für die Aufforderung, die Referenzen zu töten.

AMG
quelle
0

Die einzige "schlechte Idee", die ich mir dabei vorstellen kann, ist, dass Sie einer Rolle nicht das REFERENCES-Objektprivileg (das zum Erstellen einer Einschränkung, die auf eine Tabelle verweist) erteilen können. Ich muss Schema / Benutzer für Schema / Benutzer erledigen.

Außerdem verstehe ich nicht, worum es bei Ihrem DBA geht.

Vegatripie
quelle
0

Stellen Sie sich Folgendes vor: Das Besitzerschema der untergeordneten Tabelle beginnt, einen Datensatz in seiner Tabelle zu erstellen, und verhindert unwissentlich, dass der Benutzer des übergeordneten Tabellenschemas Datensätze aus der übergeordneten Tabelle löscht. Ist es etwas, was es vorwegnimmt und schätzt?

letron123
quelle