Email v. A. Rogalski, LibreOffice Base

Achim Rogalski                                Datum: 01.08.2020
Poppenbütteler Bogen 42
22399 Hamburg
Tel: 040-27 87 56 50
Handy: 0152-3630 9420
Email: info@24h-workers.de

Hallo Programmierer,

ich habe heute LibreOffice Base ausprobiert und einen Fehler gefunden:

Meine Test-Tabelle enthielt eine Spalte für die ID und eine Spalte für
die Kundennummer.
Beide Spalten sollten automatisch hochgezählt werden. Daher bekamen
beide Spalten das Auto-Increment Attribut.
Danach wurde Base mit einer Fehlermeldung beendet und die Tabelle war
beim nächsten Start unbrauchbar.

Ich wußte nicht, das man Auto-Increment nur einmal pro Tabelle verwenden
darf.

Mit freundlichen Grüßen

Achim Rogalski

Hallo Achim,

hier wirst Du wenig Programmierer finden, sondern in der Hauptsache
Nutzer von LibreOffice.

Meine Test-Tabelle enthielt eine Spalte für die ID und eine Spalte für
die Kundennummer.
Beide Spalten sollten automatisch hochgezählt werden. Daher bekamen
beide Spalten das Auto-Increment Attribut.

Ich habe das einmal mit der internen HSQLDB versucht:
Attempt to define a second primary key: Id2 in statement [CREATE TABLE
"Tabelle1" ("ID" INTEGER NOT NULL IDENTITY,"Kundennummer" INTEGER NOT
NULL IDENTITY]

Die Tabelle lässt sich bei mir gar nicht erstellen, wenn ich beiden
Feldern einen AutoWert zuweise. IDENTITY bedeutet dabei, dass es sich
beides Mal um Autowert handelt. Mit einfachen Primärschlüssel geht so
etwas natürlich, aber 2 Autowertschlüssel würden ja sowieso beständig
das Gleiche anzeigen, es sei denn, dass einer einen anderen Startpunkt
hat. Sie machen auf jeden Fall keinen Sinn.

Mit welcher Datenbank hast Du das denn hin bekommen? Mit der internen
Firebird, das inzwischen wieder in den experimentellen Status zurück
beordert wurde?

Gruß

Robert

Ich habe das einmal mit der internen HSQLDB versucht:
Attempt to define a second primary key: Id2 in statement [CREATE TABLE
"Tabelle1" ("ID" INTEGER NOT NULL IDENTITY,"Kundennummer" INTEGER NOT
NULL IDENTITY]

Ja. Das kann ich nachvollziehen. Nur stürzt bei mir LibreOffice nicht ab und
ich kann die angelegte Datenbank weiter benutzen, sofern ich für die zweite
Spalte keinen AutoWert festlege.

Die Tabelle lässt sich bei mir gar nicht erstellen, wenn ich beiden
Feldern einen AutoWert zuweise. IDENTITY bedeutet dabei, dass es sich
beides Mal um Autowert handelt. Mit einfachen Primärschlüssel geht so
etwas natürlich, aber 2 Autowertschlüssel würden ja sowieso beständig
das Gleiche anzeigen, es sei denn, dass einer einen anderen Startpunkt
hat. Sie machen auf jeden Fall keinen Sinn.

Es ist jedoch sonderbar, dass LibreOffice für eine Spalte, in welcher der
AutoWert eingestellt wird, automatisch diese ebenfalls als Primärschlüssel
festlegen möchte. Ist bereits ein solcher vorhanden kann das natürlich nicht
funktionieren und muss in die Hose gehen.
Legt man nun erneut die ursprüngliche Spalte als Primärschlüssel fest, so wird
die AutoWert-Einstellung entfernt.

- --

MfG Richi

Hallo Richard,

Es ist jedoch sonderbar, dass LibreOffice für eine Spalte, in welcher der
AutoWert eingestellt wird, automatisch diese ebenfalls als Primärschlüssel
festlegen möchte. Ist bereits ein solcher vorhanden kann das natürlich nicht
funktionieren und muss in die Hose gehen.

Ein Auto-Wert-Feld wird zwangsläufig zum Primärschlüssel. Das ist in der
Konstruktion des Befehls an die HSQLDB enthalten: IDENTITY.

Zwei Primärschlüssel gehen ja problemlos, wenn z.B. eine n:m-Beziehung
aufgebaut werden soll. Zusammen mit einem Autowert-Feld entbehrt aber
auch diese Konstruktion jedem Sinn, denn das Autowert-Feld macht ja
schon jeden Datensatz eindeutig. 2 Schlüssel ermöglichen es aber, z.B.
die Jahreszahl und ein Zählerfeld zusammen zu kombinieren. Dann gibt es
eben die Kombination 2018 & 1, 2018 & 2, 2019 & 1, 2020 & 1 usw. Wären
alles eindeutige Schlüsselwerte.

Und einen Absturz gibt es bei mir mit der HSQLDB auch nicht - nur die
Fehlermeldung. Ich teste das nachher noch mit Firebird. Wenn das bei
Firebird zum Absturz führt, dann muss da natürlich der Riegel
vorgeschoben werden.

Gruß

Robert

... und hier der Test mit Firebird:

In Firebird lässt sich so ein Primärschlüssel aus 2 Autowert-Feldern
erstellen. Wohl deswegen, weil es den AutoWert eigentlich bei Firebird
nicht gibt. Die Eingabe ist problemlos möglich. Beide Felder zählen
gleichmäßig hoch. Kein Absturz irgendeiner Art.

Bei Firebird wird ein separater Generator erstellt, der die Felder mit
dem Wert versieht. Das führt dann leider auch bei Leuten, die da
händisch später eingreifen, gegebenenfalls zu Problemen:

https://bugs.documentfoundation.org/show_bug.cgi?id=128558
https://bugs.documentfoundation.org/show_bug.cgi?id=119628
https://bugs.documentfoundation.org/show_bug.cgi?id=124340

... und das sind noch nicht alle kleinen Ungereimtheiten mit dem
Auto-Wert in Firebird.

Gruß

Robert