ADS(DBE) und Indexe

Advantage Database Server

Moderator: Moderatoren

Antworten
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9357
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

ADS(DBE) und Indexe

Beitrag von Tom »

Ich bin gerade auf folgendes Phänomen gestoßen:

In der Nutzung der ADS mit DBFNTX liegt eine Tabelle vor, die einen Index auf einem numerischen Feld hat. Sagen wir ganz simpel, sie besteht nur aus dem Feld "NUMMER" (N, 9). Die Tabelle wird mit Index geöffnet, sie ist leer, der Index ist aktuell (also auch leer). Ich füge jetzt drei Datensätze per "APPEND BLANK" an. Dann gehe ich zum letzten (!) Datensatz, ersetze die Nummer mit, sagen wir: 1. Anschließend gehe ich zum vorletzten Datensatz, dann zum ersten - und tue jeweils dasselbe (Nummer auf 1). Ohne ADS und mit geöffnetem Index liegt die Tabelle in der (richtigen) Datensatzreihenfolge 1, 2, 3 vor. Mit ADS sortiert sich die Tabelle in der Reihenfolge 3, 2, 1. Wenn ich den Index neu erzeuge, ist die Reihenfolge richtig. Ach ja, vor dem Befüllen des Feldes wird DbSetOrder(0) aufgerufen.

Es geht mir jetzt nicht darum, dass man hier anders vorgehen könnte, sondern darum, dass die ADS in solchen Fällen offenbar nicht - bei Schlüsselgleichheit - nach Indexausdruck+Datensatznummer sortiert, wie es die DBFNTX tut, sondern nach Reihenfolge der Schlüsselerzeugung/Feldbefüllung. :roll:
Herzlich,
Tom
olaf870
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 128
Registriert: Mi, 26. Okt 2005 18:41
Wohnort: Berlin
Kontaktdaten:

Re: ADS(DBE) und Indexe

Beitrag von olaf870 »

Solche Probleme gab es schon mit Clipper. Diese Problematik umgeht man z.B.: durch
index on (<Numersches Feld>*lastrec()*2) + recno() )
Die recno() in Schlüssel einzubeziehen verhindert auch gleichzeit Performanceverluste beim Zugriff.
Grüße
Olaf
Grüße
Olaf870
http://combifinanz.de
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: ADS(DBE) und Indexe

Beitrag von UliTs »

Bei xBase ist es genau das Gleiche:
bei gleichem Indexschlüssel ist die Reihenfolge nicht eindeutig!
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
hschmidt
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 164
Registriert: Mo, 09. Jan 2006 17:06
Wohnort: Paderborn
Hat sich bedankt: 2 Mal
Kontaktdaten:

Re: ADS(DBE) und Indexe

Beitrag von hschmidt »

Hallo,

ich denke nicht, dass man eine Datenbankanwendung so programmieren sollte, dass bei Schlüsselgleichheit die Satzreihenfolge eine Rolle spielt.
Bei unterschiedlichen Inhalten sollte es immer einen eindeutigen Schlüssel geben, bei gleichem Inhalt ist es egal, welcher Satz zurückgeliefert wird!

Hans
olaf870
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 128
Registriert: Mi, 26. Okt 2005 18:41
Wohnort: Berlin
Kontaktdaten:

Re: ADS(DBE) und Indexe

Beitrag von olaf870 »

>>Bei unterschiedlichen Inhalten sollte es immer einen eindeutigen Schlüssel geben,
>>bei gleichem Inhalt ist es egal, welcher Satz zurückgeliefert wird!
Das ist leider nicht immer so! SQL-Programmierer gestalten ihr Datenmodell nur anders, weil sie lt. dem SQL-Erfinder Codd keine Funktion wie RECNO() kennen dürfen und trotzdem mit SQL arbeiten müssen. Im DBF-Umfeld ist es gängige und bewährte Praxis die Funktion RECNO() in "keys" und anderswo zu benutzen.

Bei einer vorgesehenen Portierung eines DBF-Datenmodells und auf DBF basierender Programmlogik auf SQL-Server sind mit RECNO() natürlich größte Schwierigkeiten absehbar. Ich kann mir deswegen vorstellen, dass im Alaska-Projekt Arctica ein Feld wie "_RECNO" in allen Tabellen zwingend vorgeschrieben sein wird, um weiterhin so bequem wie bisher weiterarbeiten zu können und den Änderungsaufwand an unserer guten alten DBF-Programmlogik gegen Null gehen zu lassen.

Grüße
Olaf870
Grüße
Olaf870
http://combifinanz.de
Antworten