Anmelden

View Full Version : lange Tabellennamen



HeymannJ
24-10-11, 13:57
Hallo *ALL,

z. Zt. legen wir, in unserem Unternehmen, neue Richtlinien für das zukünftige Datenbankdesign auf der i5 fest.
Fest steht, dass wir nur noch mit SQL-Tabellen und nicht mehr mit DDS erstellten
Dateien arbeiten werden. Was noch nicht geklärt ist, ob wir zukünftig mit langen Tabellennamen (> 10 Stellen) arbeiten wollen oder ob wir bei den Kurzname bleiben werden.
Uns ist noch nicht klar, welche negativen Auswirkungen lange Tabellennamen haben können
z.B. beim CPYF, SAVOBJ, RSTOBJ und und und… oder welche Vorteile bringen Langnamen mit sich?

hat jemand Erfahrung mit langen Tabellennamen und kann uns ggf. Tipps geben.

Vielen Dank im Voraus.

B.Hauser
24-10-11, 14:14
Hallo,


Für jede Tabelle kann sowohl ein langer SQL-Name als auch ein kurzer System-Name festgelegt werden. (Einfach die Tabelle mit dem langen Namen erstellen und anschließend mit dem SQL Rename-Befehl den System-Namen hinzufügen.
Wird ein SQL Name länger als 10 Stellen verwendet, wird automatisch ein kurzer System-Name generiert, der aus den ersten 5 Stellen des langen SQL-Namen + einem 5-stelligen laufenden Zähler besteht. (Die Krux ist, dass es beim erneuten Erstellen keine Garantie gibt, dass der gleiche System-Name erneut vergeben wird, vielmehr wird einfach der nächste Zähler ermittelt.
Für den RLA (Angabe der Tabelle in den F-Bestimmungen) muss der kurze System-Name verwendet werden. Ebenso müssen die kurzen System-Namen bei allen CL-Befehlen wie CPYF oder CRTDUPOBJ verwendet werden.
Ebenso wie für den Tabellen-Namen können auch für die Spalten SQL und System-Namen festgelegt werden. Dies muss allerdings direkt im CREATE TABLE-Befehl erfolgen. Ein nachträgliches Änderung oder Setzen von kurzen System-Namen ist nicht möglich.
Vor Release 7.1 mussten beim RLA die kurzen Feld/Spalten-Namen verwendet werden. Mit Release 7.1 können nach Angabe des Schlüssel-Wortes ALIAS in den F-Bestimmungen und dem Einlesen der Datensätze in entsprechende (externe) Datenstrukturen die langen Feld-Namen verwendet werden.
Beim Zugriff über (embedded) SQL konnten schon immer die SQL und System-Namen alternativ verwendet werden.


Ich arbeite seit Jahren nur noch mit SQL beschriebenen Tabellen, Views und Indices. Trotzdem bleibe ich dabei, Tabellen und Spalten-Namen mit maximal 10 Stellen zu definieren. Wobei ich versuche die Namen soweit möglich sprechend zu gestalten. Längere Namen (mit zusätzlich fix definierten System-Namen) verwende ich nur in Ausnahmefällen.

Birgitta

Fuerchau
24-10-11, 14:20
Das war ja schon immer so: "Wer schreibt der bleibt".

Lange Tabellennamen (bis 128 Stellen) und auch Spaltennamen sind für SQL selber natürlich kein Problem.

Bei der Programmierung mit ILE (RPG/COBOL) muss man halt etwas mehr Tipparbeit leisten so lange keine vernünftige IntelliSense-Unterstützung wie bei VisualStudio/Eclipse usw. vorhanden ist.

Aber du hast schon Recht, bei den CMD's scheitert das dann schon.

CPYF kann so nicht mehr verwendet werden, hier sollte man dann einen SQL "create table mynewtable as select ... with data" kodieren, da sonst die Feldnamen der neuen Tabelle aus den Systemnamen der Ursprungsfelder bestehen, außerdem kann hier kein langer Name angegeben werden.

Beim SAV/RST muss man dann den Systemnamen angeben, bei RST wird der lange SQL-Name auch wiederhergestellt.

Möchte man eine eindeutige Zuordnung LangerName -> KurzerName so kann dies beim Create Table explizit angegeben werden, ansonsten sucht sich das System einen eigenen Namen aus (Stelle 1-5 des Namens, ggf. Ersatz von Sonderzeichen plus Lfd-Nr.).
Da kann man sich schon mal einen Wolf suchen oder man muss die SYSTABLES bemühen.

Nach dem Create Table sollte man sich auch einen "Label on" angewöhnen und ggf. den langen Namen in die Beschreibung packen, was mitunter bei nur 50 Zeichen ein Problem sein kann.

Und noch eins ist zu beachten:
Im langen Namen sind auch Sonderzeichen wie AÄÜß usw. erlaubt, z.B. : "Düs üst mün lünges Nämchen!"
Aber Achtung!
Diese Sonderzeichen sind casesensitive und CCSID-abhängig. Je nach Job-CCSID kann dann eine solche Tabelle/Feldname zur Laufzeit nicht wiedergefunden werden, da die SQL-Tabellen (SysTables/SysColumns, usw.) in der Sprach-CCSID der Systemsprache gespeichert werden.

Man sollte sich auch hier am besten aller Sonderzeichen enthalten.

Mit langen Namen arbeite ich z.Zt. nur bei Schnittstellen zu Fremdsystemen.
Ich bekomme z.B. DDL's von einem Oracle-System, erstelle die Tabellen dann per RUNSQLSTM (nach kleiner Überarbeitung) und kann dann per JAVACOPY (mein eigenes Tool, Basis Dieter Bender) ganz einfach die Dateien kopieren.
Da aber immer noch jede Menge Altprogramme vorliegen halte ich mich da dann eher an die Namenskonventionen dieser Altsoftware.

DDS kennt das Konzept REFF/REFFLD, was so in SQL nicht mehr geht.
Nach einem Create Table muss man dann mit mehreren "Label on" halt noch Beschreibung und ggf. Column-Haeding anhängen, damit man auch mit Query/WebQuery oder OpsNav noch vernünftige Erklärungen mitbekommt.
Selbstdokumentation sollte nicht vernachlässigt werden.