Seite 1 von 1

Re: 2 Fragen: Autowert und Datenbankgröße (Komprimierung)

Verfasst: So, 11.04.2010 18:10
von AndreasJBittner
Hallo Andra,

die Autoincrement-Werte werden in RDBS in sog. sequences definiert, in Oracle zB legst Du für eine sequence einen Start-, Inkrement- und Endwert fest, die DB guckt dann DORT immer nach, welcher Wert als nächstes zur Verfügung steht, deshalb wird beim Löschen eines Datensatzes eben der nächste freie Wert aus der sequence genommen, die bekommt nämlich nicht mit, daß eine ID wieder frei geworden ist. Das Einfachste ist, Du ignorierst dieses Verhalten, da mit 2^32 der Zahlenbereich groß genug sein sollte. Du müßtest ja *immer* sicherstellen, daß nur der letzte Datensatz gelöscht wird, wenn Du nämlich "mittendrin" einen löscht und die sequence auf diesen Wert zurücksetzt, würde es beim übernächsten und den weiteren Datensätzen immer zu einem Fehler kommen.

Ich vermute Du beziehst Dich auf die interne OOo-Base, die immer größer wird. Kann es sein, daß Du halt immer mehr Daten in Deiner DB hast? Wenn Du die odb mal in zip änderst und mal reinschaust, wirst Du feststellen, daß dort die Tabellendefinitionen als SQL abgelegt sind und die Daten als INSERT-Statements - daher dürfte eigentlich nur durch mehr Daten die Dateigröße wachsen, weil gelöschte Tabellen und Datensätze ja nicht mehr mit abgelegt werden müssen.

HTH, Grüße
Andreas

Re: 2 Fragen: Autowert und Datenbankgröße (Komprimierung)

Verfasst: So, 11.04.2010 18:15
von Barlee
Schließe mich den Ausführungen von Andreas an.
Betrachte den Primärschlüssel als das, was er ist. Er dient nicht der Ästhetik, sondern soll "nur" einen Datensatz als eindeutig kennzeichnen.

Zur Dateigröße: Probiere CHECKPOINT DEFRAG unter Extras/SQL

Gruß Barlee

Re: 2 Fragen: Autowert und Datenbankgröße (Komprimierung)

Verfasst: Mo, 12.04.2010 12:49
von AndreasJBittner
Hallo Andra,

für den Anspruch würde ich einfach eine weitere Spalte als lfdNr definieren und separat setzen, dann ist es egal, ob die ID Lücken aufweist. Aber wie paßt denn Dein Datensatz löschen zu einer konsistenten Buchführung? ;-)
Vielleicht arbeitest Du mit zwei Tabellen, einer, in der Datensätze noch gelöscht werden können und einer, in der der abschließend bearbeitete Datensatz übertragen wird. Dann kann in der zweiten Tabelle die ID auch als laufende Nummer fungieren. Im Übrigen kannst Du ja auch die Spalte lfdNr als autowert definieren, nur eben nicht als PRIMARY KEY (ID ist immer autowert, not null und primary key).

Viele Grüße
Andreas