Programmierung

Schlüsselwerte und -attribute

Die Schlüssel in Datenbanktabellen von CONZEPT 16 dienen dem Zugriff auf die in den Datenbanktabellen enthaltenen Datensätze.

Zu jedem Datensatz wird pro Schlüssel ein Schlüsselwert in der Datenbank abgelegt, um diesen Zugriff zu gewährleisten. Über sogenannte Attribute wird bestimmt wie diese Schlüsselwerte gebildet werden.

Schlüsselwert

Die maximal Länge eines Schlüsselwertes liegt bei 240 Byte. Der Wert setzt sich aus den Werten der einzelnen Schlüsselfelder zusammen.

Beispiele
  •   Int-Feld (4 Byte)
    + Word-Feld (2 Byte)
    = 6 Byte Schlüsselwertlänge
  •   BigInt-Feld (8 Byte)
    + Alpha-Feld mit max. 40 Zeichen
    (0 bis 40 Byte + 1 Byte Terminierungszeichen)
    = 9 bis 49 Byte Schlüsselwertlänge
  •   Logic-Feld (1 Byte)
    + Decimal-Feld (1 bis 31 Byte abhängig vom Wert)
    = 2 bis 32 Byte Schlüsselwertlänge
  •   Float-Wert (8 Byte)
    + Date-Wert (3 Byte)
    + Time-Wert (4 Byte)
    = 15 Byte Schlüsselwertlänge

Ergibt sich aus den Werten der einzelnen Felder ein Wert, der die maximale Schlüsselwertlänge von 240 Byte überschreitet, wird der Schlüsselwert bei 240 Byte abgeschnitten.

Beispiel

  Word-Wert (2 Byte)
+ Alpha-Feld mit max. 1.000 Zeichen
(0 bis 1.000 Byte + 1 Byte Terminierungszeichen)
= 3 bis 1.003 Byte Schlüsselwertlänge,
abgeschnitten bei 240 Byte also nach dem 238. Zeichen des Alpha-Feldes

Sortierung

Aus den Schlüsselwerten ergibt sich die Sortierung der dazugehörigen Datensätze. Datensätze mit größerem Schlüsselwerte folgen Datensätzen mit kleinerem Schlüsselwert.

Über das Schlüsselattribut "eindeutig" kann bestimmt werden, dass jeder Schlüsselwert nur einmal in der Tabelle vorkommen darf. Der erste Schlüssel einer Tabelle hat dieses Attribut automatisch gesetzt. Ist dieses Attribut nicht gesetzt und es exisitieren identische Schlüsselwerte, bestimmt die Datensatz-ID die Reihenfolge dieser Datensätze. Datensätze mit größerer Datensatz-ID folgen Datensätzen mit kleinerer Datensatz-ID. Die Datensatz-ID wird zusätzlich zum Schlüsselwert gespeichert.

Schlüsselfeldattribute

Zur weiteren Bestimmung des Zugriffsverhaltens können bei jedem Schlüsselfeld Attribute gesetzt werden. Folgende Attribute sind möglich:

  • absteigende Sortierung

    Anstatt die Werte von klein nach groß aufsteigend zu sortieren, werden sie mit diesem Attribut in umgekehrter Reihenfolge sortiert; also von groß nach klein absteigend.

    Beispiel
    aufsteigende Sortierung

    a < b < c < d < e

    absteigende Sortierung

    e < d < c < b < a

Für alphanumerische Schlüsselfelder können außerdem weitere Attribute gesetzt werden, die Einfluss auf die Sortierung, die Eindeutigkeit und den Zugriff auf die dazugehörigen Datensätze haben.

Beispiel ohne Wandlung

A < O < S < U < a < o < s < u < Ä < ä < Ö < ö < Ü < ü < ß

Folgende Attribute stehen für alphanumerische Felder zur Verfügung:

  • Groß-/Kleinwandlung

    Alle Kleinbuchstaben von "a" bis "z" und die deutschen Umlaute "ä", "ö" und "ü" werden in Großschreibung in den Schlüsselwert gespeichert. Das hat zur Folge dass die Datensätze unabhängig von der Groß-/Kleinschreibung des Alpha-Feldes sortiert werden.

    Beispiel mit Groß-/Kleinwandlung

    A = a (A) < O = o (O) < S = s (S) < U = u (U) < Ä = ä (Ä) < Ö = ö (Ö) < Ü = ü (Ü) < ß

  • Umlaute in alphabetischer Sortierung

    Dieses Attribut kann nur gesetzt werden, wenn das Attribut "Groß-/Kleinwandlung" gesetzt ist.

    Die deutschen Umlaute "ä", "ö", "ü", und das Eszett "ß" werden in ihrer "Grundform" in den Schlüsselwert gespeichert:

    ä -> ae
    ö -> oe
    ü -> ue
    ß -> ss

    Dadurch werden die Datensätze, deren Alpha-Feld Umlaute oder Eszetts enhalten, alphabetisch sortiert.

    Beispiel mit Umlauten in alphabetischer Sortierung

    A = a (A) < Ä (AE) = ä (AE) < O = o (O) < Ö (OE) = ö (OE) < S = s (S) < ß (SS) < U = u (U) < Ü (UE) = ü (UE)

  • ohne Sonderzeichen

    Dieses Attribut kann nur gesetzt werden, wenn die Attribute "Groß-/Kleinwandlung" und "Umlaute in alphabetischer Sortierung" gesetzt sind.

    Alle Zeichen, die nicht im Bereich von "0" bis "9" oder "A" bis "Z" liegen, werden nicht im Schlüsselwert gespeichert. Das bedeutet, dass eventuell im Alpha-Feld das Datensatzes enhaltene Sonderzeichen wie Kommata, Bindestriche und Leerzeichen für die Sortierung außer Acht gelassen werden.

    Beispiel ohne Sonderzeichen

    "1-2-3 AG" (123AG) = "1 2 3 AG" (123AG) = "123-AG" (123AG)

    Dieses Attribut ist vornehmlich für den Zugriff vorgesehen, wenn die genaue Schreibweise nicht bekannt ist.

  • Soundex

    Dieses Attribut kann nur gesetzt werden, wenn die Attribute "Groß-/Kleinwandlung", "Umlaute in alphabetischer Sortierung" und "ohne Sonderzeichen" gesetzt sind.

    Das Alpha-Feld wird mit Hilfe eines Soundex-Algorithmus als "Klang" des gesprochenes Wortes gespeichert. Mit dem Attribut "Soundex 1" werden folgende Ersetzungen vorgenommen:

    ai -> ei
    ay -> ei
    ch -> h
    chs -> x
    ck -> k
    ie -> i
    j -> i
    ph -> f
    th -> t
    y -> i
    ey -> ei

    Gleiche Buchstaben, die mehrfach hintereinander auftreten, werden auf einen Buchstaben reduziert.

    Beispiel mit Soundex 1

    Mayer (MEIR) = Maier (MEIR) = Meier (MEIR) = Meyer (MEIR)

    Dieses Attribut ist vornehmlich für den Zugriff vorgesehen, wenn die genaue Schreibweise nicht bekannt ist.

    Mit dem Attribut "Soundex 2" werden zusätzlich folgende Ersetzungen vorgenommen:

    v -> f
    d -> t
    b -> p
    sch -> s
    g -> k
    z -> s

    Beispiel mit Soundex 2

    Josef (IOSEF) = Iosev (IOSEF) = Jozeff (IOSEF)

  • Maximale Länge

    Durch die Angabe einer maximalen Länge kann die Länge des Schlüsselwertes limitiert werden, um eventuell folgende Schlüsselfelder noch im Schlüsselwert unterbringen zu können.

    Beispiel

    Alpha-Feld mit max. 400 Zeichen
    (0 bis 400 Byte + 1 Byte Terminierungszeichen)
    + Int-Feld (8 Byte)
    = 9 bis 409 Byte Schlüsselwertlänge,
    abgeschnitten bei 240 Byte also nach dem 240. Zeichen des Alpha-Feldes

    Das Int-Feld ist bei einem Alpha-Feld mit einem Wert mit mehr als 231 Zeichen nur teilweise oder garnicht im Schlüsselwert enthalten.

    Alpha-Feld mit max. 400 Zeichen beschränkt auf 200 Zeichen Schlüsselwertlänge
    (0 bis 200 Byte + 1 Byte Terminierungszeichen)
    + Int-Feld (8 Byte)
    = 9 bis 209 Byte Schlüsselwertlänge

    Durch eine Limitierung der maximalen Schlüsselwertlänge des Alpha-Feldes auf 200 Zeichen, ist gewährleistet, dass das Int-Feld im Schlüsselwert enthalten ist.

3 Kommentare

3 Kommentare “Schlüsselwerte und -attribute”

  1. @Th.Eichele: Wenn die Schlüsselattribute von den Verknüpfungsattributen abweichen, werden u.U. die falschen oder gar keine Datensätze gelesen. In der Regel sollten die Attribute identisch gesetzt werden. Ein Überprüfung können Sie mit den Funktion KeyFldInfo() und LinkFldInfo() realisieren.

    @J. Schmiedel: Ja, die Schlüsselwertlänge ist durch die derzeitige Speicherung in einem Byte limitiert. Für die Prüfung längerer Zeichenketten empfiehlt sich die Speicherung eines Hash-Wertes zu der Zeichenkette. Über diesen Hash-Wert wird dann ein Schlüssel gebildet, statt über die Zeichenkette selbst.
    Sie können den Export Ihrer Daten über eine Prozedur durchführen und darin auch auf gespeicherte Texte zugreifen um diese zu exportieren.

  2. Die Schlüssellänge von 240 ist sicherlich durch C16-Interna gegeben?

    Hätte man eine größere Schlüssellänge, könnte man den Inhalt "großer" Alphafelder(zwischen 256 und 4096 Zeichen) leicht auf Vorhandensein prüfen.

    Ein kleiner Abstecher zu Texten:
    Wäre es nicht möglich Texte als Datenbankfeld zu verwalten
    (wie das C16-intern gelöst wird, kann dem C16-Anwender
    = Entwickler eigentlich egal sein)? Der Verwaltungsaufwand der Textpuffer würde entfallen und der Export der C16-Tabellen wäre transparenter:
    Dann müsste ich nicht jedesmal erklären, warum der Export unser Artikelstammdatei keinen Einkaufs- und Verkaufstext
    ausweist …

  3. was passiert wenn die Attribute von Verknüpfungen nicht mit denen des verknüpften Schlüsselfeld übereinstimmen ?
    gibt es eine Prüfmöglichkeit oder müsste man die ggfs. selbst schreiben ?

Kommentar abgeben