Eddie: Schreibweise von Tabellennamen, Attributen, ...

Hallo allerseits,

ich suche gerade nach Tipps zur Schreibweise von Bezeichnern in MySQL - bin aber in der MySQL-Doku leider nicht fündig geworden und etwas am Rätseln :-/

Offenbar scheint alles möglich zu sein: komplett gemischte Klein- und Großschreibung, beim Zugriff wird offenbar auch nicht unterschieden. Ich kann also auf ein Attribut "Name" durchaus mit "nAME" zugreifen. Funktioniert zumindest bei mir (MySQL 4.x).

Jetzt aber trotzdem die Frage, ob ihr mir da vielleicht was raten könnt?

Danke für eure Hilfe,
Eddie

--
Old men and far travforelers may lie with authority.
  1. Jetzt aber trotzdem die Frage, ob ihr mir da vielleicht was raten könnt?

    Ein wichtiges und interessantes Thema!

    Nicht verkehrt ist es alles klein zu schreiben, m.E. ist es allerdings nicht nur ein Tribut an die deutsche Kultur den ersten Buchstaben gross zu schreiben, das unterstützt auch die Lesbarkeit.

    Keine Präfices! - Warum? Nun, tbl\_Customers ist einfach uncool, von df\_Customers\_ID ganz zu schweigen.

    Wir selbst nutzen nur die Suffices \_ID, \_UFID und ggf. \_GUID.

    Für Datenfeldnamen haben Wir die King^Lully-Notation entwickelt:
    <Tabellenname>_<Datenfeldname>(ggf. _Suffix)

    Vorteil hier die DB-eindeutige Namensgebung, was u.a. das JOINen aus dem Gedächtnis erleichtert und die Weitergabe der Variablennamen an umgebenden, weiterverarbeitenden Code ermöglicht.

    Wichtig auch die Semantik, Variablennamen sollten "richtig" sein.

    Zu allerletzt noch der Hinweis, dass eine Schreibform durchgehalten werden muss, jede Schreibform, die durchgehalten wird ist akzeptabel bzw. tolerabel. Aller-allerletzter Hinweis: Keine unnötigen Namensschichten bilden.

  2. Moin!

    Offenbar scheint alles möglich zu sein: komplett gemischte Klein- und Großschreibung, beim Zugriff wird offenbar auch nicht unterschieden. Ich kann also auf ein Attribut "Name" durchaus mit "nAME" zugreifen. Funktioniert zumindest bei mir (MySQL 4.x).

    Ob das klappt, hängt unter anderem auch vom benutzten Dateisystem ab, und das wiederum vom benutzten Betriebssystem. MySQL speichert jede Tabelle der Datenbank in mindestens einer Datei - und deren Dateiname ist z.B. unter Windows case-insensitiv, daher reagiert auch MySQL auf die Namensangaben in SQL-Queries, die den Tabellennamen erwähnen, case-insensitiv. Das funktioniert aber nur, solange die Datenbank nicht auf ein System mit case-sensitivem Dateisystem (z.B. Linux) transferiert wird. Dort ist dann auch MySQL case-sensitiv gegenüber den SQL-Queries.

    Von daher ist es eine extrem gute Idee, sämtliche Namensangaben aus Prinzip ausschließlich in Kleinschreibung zu wählen. Im Gegensatz dazu ist es dann wiederum eine nicht verkehrte Idee, sämtliche Befehle im SQL-Query in Grossschreibung zu wählen, auch wenn das nicht zwingend vorgeschrieben ist. Es hat sich als Konvention verbreitet.

    Außerdem sollte man natürlich problematische Namensgebung vermeiden. Also keine Zeichen verwenden, die außerhalb des ASCII-Zeichenbereich liegen - z.B. keine Umlaute! Keine Sonderzeichen. Keine reservierten Worte.

    Hinsichtlich der IDs für zu verknüpfende Tabellen würde ich anregen, in den zwei Tabellen jeweils identische Spaltenbezeichnungen zu wählen. Das ist erstens optisch netter (was gleich heißt, ist das Gleiche), und zweitens bietet es auch im Query einen Vorteil: Statt "JOIN tab2 ON tab1.id = tab2.fremdid" kann man "JOIN tab2 USING idspalte" verwenden, wenn tab1.idspalte und tab2.idspalte existieren. Kürzt den Query ab, bringt optische Klarheit - ändert aber nix an der Performance. Trotzdem halte ich es für sinnvoll.

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
    1. yo,

      Ob das klappt, hängt unter anderem auch vom benutzten Dateisystem ab, und das wiederum vom benutzten Betriebssystem. MySQL speichert jede Tabelle der Datenbank in mindestens einer Datei - und deren Dateiname ist z.B. unter Windows case-insensitiv, daher reagiert auch MySQL auf die Namensangaben in SQL-Queries, die den Tabellennamen erwähnen, case-insensitiv. Das funktioniert aber nur, solange die Datenbank nicht auf ein System mit case-sensitivem Dateisystem (z.B. Linux) transferiert wird. Dort ist dann auch MySQL case-sensitiv gegenüber den SQL-Queries.

      das wäre fatal, wenn das so wäre. das ziel sollte sein, ein dbms so unabhängig wie möglich von dem verwendeteten betriebssystem zu machen, sprich das verhalten sollte sich gleichen. bei oracle spielt es demzufolge keine rolle, ob ich windows oder linux als betriebssystem gewählt habe, die tabellennamen (objektnamen) sind immer case-insensitive. selbst die eingabe der benutzernamen und passwörter ist case-insensitive. anders sieht es wiederum mit den daten ansich aus. diese sind sowohl unter windows als auch unter linux case-sensitive.

      demzufolge kann ich mir eigentlich nicht vorstellen, dass mysql den weg gewählt hat, die tabellennamen je nach betriebssystem case-sensitiv, bzw insentiv zu implementieren. das wäre einfach nur dumm.

      Ilja

      1. Moin!

        demzufolge kann ich mir eigentlich nicht vorstellen, dass mysql den weg gewählt hat, die tabellennamen je nach betriebssystem case-sensitiv, bzw insentiv zu implementieren. das wäre einfach nur dumm.

        Glauben heißt nicht wissen, und du glaubst falsch:
        http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html

        - Sven Rautenberg

        --
        "Love your nation - respect the others."
        1. Glauben heißt nicht wissen, und du glaubst falsch:
          http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html

          Vermutlich gibt es in der Gemeinde der besitzerlosen SW-Ersteller bereits Scripte, die wiederum FS und SQL-Scripte analysieren und abgleichen?   ;)

        2. yo,

          Glauben heißt nicht wissen, und du glaubst falsch:

          es ging mir weniger darum, ob ich das weiß oder nicht, sondern um die aussage, wenn es so wäre, dann wäre das eine sehr grosse dummmheit. mysql hatte viele gute ansätze, aber leider auch immer wieder solche unsinningen implementierungen....

          Ilja