it-swarm.com.de

Warum sind Oracle-Tabellen- / Spalten- / Indexnamen auf 30 Zeichen beschränkt?

Ich kann verstehen, dass es vor vielen Jahren eine solche Einschränkung gab, aber heutzutage könnte diese Einschränkung sicherlich leicht erhöht werden. Wir haben Namenskonventionen für Objekte, aber es gibt immer wieder Fälle, in denen wir diese Grenze überschreiten - insbesondere bei der Benennung von Fremdschlüsseln.

Weiß eigentlich jemand, warum dies nicht größer ist - oder ist es größer in 11 g?


Anscheinend ist die Antwort, dass derzeit nicht defensiv codierte Skripte beschädigt werden. Ich sage, das ist eine sehr besorgniserregende Sache, Oracle versucht, die Datenbank zu sein, sicherlich ist dies die Art von Sache, die Sie ständig verbessern müssen, sonst wird Ihr Produkt den Tod von tausend Schnitten sterben.

Immer wenn ich diese Art von Einspruch im eigenen Haus sehe, denke ich, ist es an der Zeit, die Kugel zu beißen und sie zu sortieren. Wenn Benutzer Skripts ausführen, die sie beim Upgrade von Oracle-Versionen nicht überprüfen oder warten, müssen sie die Konsequenzen dieser Wahl tragen. Stellen Sie ihnen ein Kompatibilitätsflag bis zu einer Größe von 4000 zur Verfügung und sparen Sie mir die verschwendete Zeit, wenn ich Objekte erstelle, die ständig bis 30 zählen müssen, um zu überprüfen, ob der Name "OK" ist.

147
Chris Gill

Ich glaube, es ist der ANSI-Standard.

EDIT:

Eigentlich denke ich, dass es der SQL-92-Standard ist.

Eine spätere Version des Standards scheint optional 128-stellige Namen zuzulassen, dies wird von Oracle jedoch noch nicht unterstützt (oder es wird teilweise unterstützt, sofern 30 Zeichen zulässig sind. Hmmm.)

Suchen Sie auf dieser Seite nach "F391, Lange Bezeichner" ... http: //stanford.edu/dept/itss/docs/Oracle/10g/server.101/b10759/ap_standard_sql001.htm

(Auf der Suche nach einem Schiedsrichter)

70
cagcowboy

Zusätzlich zu dem Argument von cagcowboy, dass es vom SQL-Standard herrührt (ich vermute, dass die Entscheidung von Oracle zum SQL-Standard geführt hat, da Oracle vor der Standardisierung von SQL war), würde ich wetten, dass ein Großteil der Abneigung, längere Bezeichner zuzulassen, von stammt Die Erkenntnis, dass es Millionen von DBAs mit Millionen von benutzerdefinierten Skripten gibt, die alle davon ausgehen, dass Bezeichner 30 Zeichen lang sind. Zulassen jeder Codezeile, die so etwas wie geht

  l_table_name VARCHAR2(30);
BEGIN
  SELECT table_name
    INTO l_table_name
    FROM dba_tables
   WHERE ...

plötzlich zu brechen, weil der DBA vor 15 Jahren VARCHAR2 (30) anstelle von DBA_TABLES.TABLE_NAME%TYPE im Skript verwendete, würde einen massiven Aufstand auslösen. Ich würde wetten, dass Oracle allein Tausende von Orten hat, an denen solche Dinge im Laufe der Jahre in verschiedenen Paketen und Komponenten durchgeführt wurden. Das Nachrüsten des gesamten vorhandenen Codes zur Unterstützung längerer Bezeichner wäre ein gewaltiges Projekt, das mit ziemlicher Sicherheit Art und Weise mehr Kosten für Entwicklerzeit, QS-Zeit und neu eingeführte Fehler verursachen würde als Vorteile.

45
Justin Cave

Ich habe dies nachgeschlagen und diese Frage über Google gefunden, aber auch herausgefunden, dass dies ab Oracle 12c Release 2 (12.2) nicht mehr der Fall ist. ( https://Oracle-base.com/articles/12c/long-identifiers-12cr2 )

Irgendwann hat jeder DBA oder Entwickler einen Punkt erreicht, an dem die Beschränkung auf 30 Zeichen für Objektnamen ein Problem verursacht hat. Diese Beschränkung kann bei Migrationsprojekten von SQL Server oder MySQL nach Oracle äußerst schmerzhaft sein. In Oracle Database 12cR2 beträgt die maximale Länge der meisten Bezeichner jetzt 128 Zeichen.

Dies ist eine neue Funktion in 12.2, laut ( http://blog.dbi-services.com/Oracle-12cr2-long-identifiers/ ). Demnach war 12.1 noch auf 30 Zeichen begrenzt.


Bearbeiten: Hier ist ein Link zur offiziellen Oracle-Dokumentation, die die Änderung erklärt. ( https://docs.Oracle.com/cloud/latest/exadataexpress-cloud/CSDBF/longer-identifier-names.htm#CSDBF-GUID-F4CA155F-5A37-4705-8443-0A8C9E3F875C )

Ab Oracle Database 12c Release 2 (12.2) wurde die maximale Länge der Bezeichnernamen für die meisten Arten von Datenbankobjekten auf 128 Byte erhöht.

11
Kanmuri

Angesichts der praktischen Notwendigkeit von Längenbeschränkungen für Bezeichner beschränkt ein gutes Design die Länge tatsächlicher Namen, um zu vermeiden, dass sie an die Decke stoßen, wenn die Namen miteinander und mit Präfixen und Suffixen kombiniert werden.

Beispielsweise eine Konvention zum Benennen von Fremdschlüsseleinschränkungen

FK_<table1>_<table2> 

begrenzt Tabellennamen auf 13 Zeichen oder weniger; Die meisten Datenbanken benötigen mehr Präfixe und Suffixe, was die Länge der Tabellennamen weiter einschränkt.

6
Lorenzo Gatti

Verstöße gegen Einschränkungen werden in SQLERRM gemeldet, das auf 255 Zeichen begrenzt ist und von den meisten Clients verwendet wird, um Fehler sichtbar zu machen. Ich vermute, dass eine Erhöhung der zulässigen Größe von Einschränkungsnamen die Möglichkeit, Verstöße zu melden, erheblich beeinträchtigen würde (insbesondere, wenn eine Einschränkungsverletzung durch einige Schichten von PL/SQL-Code in die Luft gesprudelt wurde).

5
Gary Myers

Ich glaube, dass die Länge des 30-stelligen Bezeichners von COBOL stammt, das Ende der 1950er Jahre standardisiert wurde. Da COBOL-Programme der Hauptnutzer von SQL (und zuvor SEQUEL (und zuvor QUEL)) waren, muss dies eine vernünftige Zahl für die Länge des Bezeichners gewesen sein.

4
Michael Dillon

Alle diese „Einschränkungen“ bleiben als Reaktion auf Einschränkungen durch Prozessorarchitekturen aus den 70er Jahren bestehen. Seitdem haben sich Prozessoren so weit entwickelt, dass diese Einschränkungen nicht mehr erforderlich sind. Sie sind einfach übrig. Für die Autoren des RDBMS ist es jedoch ein RIESIGES Unterfangen, sie zu ändern. Da sich diese Längenbeschränkungen auf alle nachgelagerten Änderungen auswirken, kann und wird es wohl oder übel passieren, dass ein längerer Prozedurname eine Menge anderer Dinge wie Ausnahmemeldungen, das Datenwörterbuch usw. usw. zerstört. Ich würde ein umfangreiches Umschreiben des Oracle-RDBMS erfordern.

4
Mac

Die direkte Antwort auf die Frage ist, dass der Oracle-Stil von älteren Ideen übernommen wurde, bei denen 30 eine Menge zu sein schien, und viel mehr hätte das Risiko erhöht, dass der Wörterbuch-Cache in typischen Datenbanken aus dem realen Speicher entfernt wird.

Im Gegensatz dazu stammt der ODBC -Namensraum aus einem ganz anderen Bereich, in dem Datensätze schnell extrahiert werden, indem eine Tabelle in einer Excel-Tabelle analysiert und automatisch Datenbanktabellen mit Spaltennamen erstellt werden, die aus Tabellenüberschriften stammen. Wenn Sie so denken, können Sie Bezeichner zulassen, die sogar eingebettete Zeilenumbrüche und natürlich Sonderzeichen und gemischte Groß- und Kleinschreibung enthalten. Es ist eine vernünftige Abstraktion, weil sie die Denkweise heutiger Datenanalysten modelliert.

Unabhängig von SQL92 ist die Einhaltung von ODBC für die heutige universelle Datenbank von entscheidender Bedeutung, und andere Anbieter haben dies besser angegangen als Oracle. Sogar Teradata zum Beispiel, das von vielen als nicht allgegenwärtig angesehen wird, bietet ZWEI Namespaces mit und ohne Anführungszeichen an, wobei erstere ein Zeichenlimit von 30 und letztere eine vollständige ODBC -Implementierung aufweisen seltsame lange Bezeichner werden berücksichtigt.

Selbst in der traditionellen Arena mit großen Datenbanken sind 30 Zeichen oft ein Problem, bei dem Namen sinnvoll, konsistent und einprägsam bleiben sollen. Sobald Sie anfangen, spezialisierte Strukturen mit Vererbung mit Rollennamen zu entwerfen, beginnen Sie, Abkürzungen abzukürzen, und die Konsistenz verschwindet bald, da beispielsweise derselbe Stammbezeichner, der als Tabellenname oder Spaltenname wiedergegeben wird, in einem Fall eine weitere Abkürzung benötigt und in dem anderen nicht . Wenn reale Benutzer in großer Anzahl zu solchen Ebenen eingeladen werden, ist die Benutzerfreundlichkeit sehr schlecht, und glücklicherweise besteht das Hauptanliegen einer alternden Datenbank nun darin, Benutzer über Objektebenen und BI-Tools von der Datenbank zu trennen.

Dies überlässt die Datenbankebene dem DBA und den Datenarchitektenteams, die sich vielleicht nicht darum kümmern. Das Ausarbeiten von Abkürzungsschemata ist anscheinend immer noch eine lebenslange Aufgabe.

Dass Oracle nicht auf diese alte Einschränkung eingegangen ist, lässt sich möglicherweise hauptsächlich auf die Tatsache zurückführen, dass es (noch) nicht viel Geschäft mit seiner Konkurrenz verliert, wenn es Datenbankdesigns, die mit längeren Bezeichnern erstellt wurden, nicht direkt portieren kann.

2
atconsul

Alle obigen Kommentare sind richtig, ABER Sie müssen die Leistungskosten längerer Namen berücksichtigen. In den frühen 90er Jahren, als Informix eine riesige Werbetafel aufstellte: "Informix schneller als Oracle!" Informix hat auf Route 101 neben der Oracle-Zentrale Tabellennamen nur mit weniger als 18 Zeichen zugelassen! Der Grund liegt auf der Hand: Tabellennamen in ihrer wörtlichen Form (d. H. Als tatsächliche Namen anstelle von 't138577321' oder ähnlichem) werden im Datenwörterbuch gespeichert. Längere Namen entsprechen einem größeren Datenwörterbuch. Da das Datenwörterbuch jedes Mal gelesen wird, wenn eine Abfrage eine genaue Analyse erfordert, entspricht ein größeres Datenwörterbuch einer schlechten Leistung.

1
Raphael