| |
Anzeigen |
|
|
Social Bookmark Script |
|
|
|
 |
Master child / indizes |
Remo
Jungspund

Dabei seit: 25.09.2007
Beiträge: 11
 |
|
Hallo zusammen,
ich hab gleich mal zu Beginn des neuen Jahres wiedereinmal VDF gestartet und kämpfe wiedereinmal mit Dingen die aus meiner Sicht alles andere als intuitiv umgesetzt wurden.
Persönlich würde ich es toll finden, wenn es einen "Best practice Guide bezüglich Indizes" geben würde, da es bei diesem Thema einige Dinge gibt, die in den Details ganz anders funktionieren als man es sich von den restlichen SQL System gewohnt ist.
Ich hab schon an einigen Stellen nach solchen Informationen gesucht, sie aber nur punktuell in der Knowledge Base und in den Newsgroups gefunden..
Auch wenn vielleicht wiedereinmal der eine oder andere Satz in meiner direkten Art etwas unfreundlich erscheinen mag, so betrachtet dies bitte als konstruktiven Input...
Ich hab einige Punkte die mir als ungewohnt erscheinen anbei aufgelistet.. Ich hoffe ich bin nicht die einzige Person die dies als ungewohnt betrachtet ;-)
Besten Dank und einen guten Start ins 2008!
Remo
Unique Index
Wieso muss bei VDF ein Index zwingend eindeutig sein? Dies macht doch überhaupt keine Sinn, das kostet nur Performance und Speicherplatz?
Ich hatte vor später auf eine andere DB umzusteigen, während der Entwicklung ist es aber ganz praktisch mit der integrierten DB zu arbeiten.. Wenn ich nun aber dabei die Indizes in dieser Art und Weise definieren muss.. hmm.. Muss ich dann gleich alles mit VDFQuery erledigen?
Reihenfolge
Spielt es eine Rolle in welcher Reihenfolge die Felder innerhalb eines Index abgelegt werden?
ReIndex
Wann muss ich einen ReIndex Vorgang manuell starten?
Und wieso überhaupt? Wäre es nicht möglich zu erkennen, dass der Index nicht mehr gültig ist und dann halt einen langsameren Fullscan zu starten? Lieber eine langsame Performance als keinen Zugriff auf die Daten..
Master-Child Relationships
Wieso kann ich eine Beziehung definieren, welche dann später wenn ich eine Master-Child Maske erstellen will gar nicht funktioniert?
Warning: Relationship were found in file projects that are not represented in your DD class files...
Was bringt eine Relationship wenn sie nicht im DD ist?
Primary key index doesn't match relationship columns
Der Check Relationship Report sagt mir dies, aber die Spalten sind identisch definiert (numeric 6.0).
Was ist eigentlich ein Primary Key? "Column Settings" - "Key Field"?
Im Relationship Wizard kann ich diese Spalte nicht auswählen wenn nach dem Primary Key verlangt wird...?
Recnum
Was hat es mit Recnum auf sich? Gewisse Leute haben an der Kurzpräsentation in Luzern gesagt, man könne damit der Index eindeutig ist, recnum hinzufügen. Dies führt aber soweit ich dies verstehe dazu, dass VDF den key nicht mehr als solchen erkennt?!
Selbstbezug
Im Wizard für die Relationships kann ich die Tabelle in der ich mich befinde nicht auswählen. Manuell hingegen geht dies..
Gibt es Gründe dafür? Wie sollte man einen Selbstbezug (z.B für eine Rekursion) am besten machen?
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Remo: 04.01.2008 10:57.
|
|
04.01.2008 10:44 |
|
|
Michael
Grünschnabel
Dabei seit: 11.12.2007
Beiträge: 6
Einsatzart von VDF: gewerblich Anwenderstatus: Programmierer Herkunft: MH Betriebssystem: Vista
 |
|
| RE: Master child / indizes |
 |
Hallo Remo,
hier ein Paar Anmerkungen von mir ohne Anspruch auf Vollständigkeit:
Unique Index
Ein Index muss nicht zwingend eindeutig sein. Duch hinzufügen des "Feldes" Recnum am Ende der Indexkette ist er das dann nicht mehr.
Gehört der Index allerdings zu einer Elterndatei muss er natürlich eindeutig sein, damit der Kinddatensatz seinen Elterndatensatz eindeutig findet.
Reihenfolge
In _der_ Reihenfolge wird dann sortiert. Wenn ich z.B. zuerst das Feld PLZ angebe und danach NACHNAME kann ich für ein PLZ-Bereich in alphabetischer Reihenfolge durch die Adressen blättern. Umgekehrt würde es kaum Sinn machen, für einen bestimmten Nachnamen eine Sortierung in PLZ-Reihenfolge zu erhalten.
ReIndex
Bei mir ist schon lange kein Index mehr kaputt gegangen. Das passiert höchstens, wenn DataFlex einen Datensatz gespeichert hat, und dann z.B. der Strom ausfällt oder das Netzwerk zusammenbricht und das Programm keine Zeit mehr hat, den Index zu aktualisieren.
Master-Child Relationships
Wenn die Relationen gesetzt sind, solltest Du im DataBaseBuilder auf der TabPage "Structures" bei Delete- und SaveStructure auf den "Zauberstab", dann werden die Relationen auch im DD bekannt.
KeyField
bedeutet, das der Wert nachträglich nicht mehr geändert werden darf,
weil darüber z.B. eine Relation erstellt worden ist, d.h. ein Kinddatensatz könnte bereits angelegt worden sein.
Recnum // VDF-Eigenheit
ist ein virtuelles Feld (Datensatz-Nr), das automatisch verwaltet wird.
Darüber ist jeder Datensatz eindeutig adressierbar - auch ohne dass dafür ein Index angelegt werden muss.
Selbstbezug
Das Stichwort hierzu lautet ALIAS-Datei, ist in der Hilfe ausführlich beschrieben und eine tolle Möglichkeit von VDF.
hth
__________________ Michael Trucksess
|
|
04.01.2008 19:33 |
|
|
Remo
Jungspund

Dabei seit: 25.09.2007
Beiträge: 11
Themenstarter
 |
|
Danke Michael..
Unique Index
Doch der Index ist ja dann wieder eindeutig weil recnum's ja eindeutig sind. Diese recnum einzubinden ist genau das was ich nicht verstehe, das kostet nur Speicherplatz und Performance..
Reihenfolge
Da hab ich mich wohl unklar ausgedrückt, ich meinte nicht diese Reihenfolge, sondern die der Felder innerhalb eines Composite Index.. Ich hatte zB Probleem als recnum die erste Spalte innerhalb des Index war..
ReIndex
Tja keine Ahnung ;-)
Master Child
Okay diesen Zauberstab muss ich mir mal anschauen..
Recnum
Für sowas hab ich doch einen Primary Key?
Selbstbezug
Hmm okay muss ich mal durchlesen.. Was wäre so schlimm wenn man einen Selbstbezug direkt anlegen könnte ohne noch eine Tabelle anzulegen? Naja ich les mal die Hilfe durch, vielleicht kann ich es dann ja selber beantworten ;-)
Danke!
Remo
|
|
05.01.2008 12:29 |
|
|
Roman Köhler
Administrator
    

Dabei seit: 29.08.2007
Beiträge: 202
Einsatzart von VDF: gewerblich Anwenderstatus: VDF-Entwickler Herkunft: Mannheim Betriebssystem: Windows XP
 |
|
Hallo Remo,
Unique Index
Strenggenommen hast Du natürlich recht, dass durch das Hinzufügen der Recnum ein Index nicht mehrdeutig wird, da die Recnum ja auch eindeutig ist.
Aber jede Datenbank, egal ob DF oder SQL muss einen Datensatz wieder finden können. Dazu muss er eindeutig identifizierbar sein. Dazu benutzt DF die automatisch generierte recnum = Record Number. Auf diese Recnum hast Du als Anwender oder Programmierer keinerlei Einfluss. Sie wird einfach automatisch mit der nächsten Datensatzneuanlege weitergezählt. In einer SQL-Datenbank muss es einen solchen eindeutigen Datensatzidentifikator auch geben, keine Ahnung wie er dort heißt, ob er unter SQL überhaupt ersichtlich oder auf ihn zugegriffen werden kann. Aber anders kann ein Datensatz ja auch gar nicht eindeutig gefunden werden.
Nun zum eigentlichen Problem:
Ich will, dass in meiner Datenbank die Kunden nach Nachnamen - Vornamen und Geburtsdatum sortiert werden. In diesem Fall legt man genau einen solchen Index nach Nachnamen, Vornamen und Geburtsdatum an. So konfiguriert, kann als hier Folge pro gleichem Nachnamen, Vornamen und Geburtsdatum nur ein Datensatz erfasst werden. Wenn man den 2. Max Müller, geboren am 01.01.1999 eingeben willst, ist mit einer Fehlermeldung Schluss.
Durch Hinzufügen der Recnum am Ende des Index (und nur dort macht es einen Sinn), läßt man pro gleichem Nachnamen, Vornamen, Geburtsdatum und Recnum auch nur einen Datensatz zu. Da es die Recnum aber ja nur einmal im System gibt, bedeutet dies für Deine manuell gefüllten Felder (Nachnamen, Vornamen und Geburtsdatum), dass es mehrere Kunden mit gleichen Daten geben kann. Innerhalb dieser gleichen Daten wird dann einfach noch nach der Reihenfolge der Erfassung (Recnum) sortiert.
Mag sein, dass dies für einen SQL-Anhänger etwas unlogisch ist, weil dieser Identifikator im Hintergrund arbeitet, aber bei DF bleibt Dir nichts anderes übrig, als Dich damit zu arrangieren.
Zum Argument Speicherplatz kann ich Dir leider nur sagen, dass ich mir darüber seit Jahren keine Gedanken mehr mache. Bei den heutigen HD-Preisen und -Kapazitäten verschwende ich keine Minute mehr damit, Speicherplatz-sparsam zu programmieren.
Und in der Performance, behaupte ich einmal so frei raus, würde ich keinen Unterschied merken, ob meine Datei ein Indexfeld oder 10 Indexfelder hat. Mag natürlich sein, wenn Du mit Millionen von Datensätzen arbeitest, dann ein Unterschied messbar ist, gemerkt habe ich aber noch nie einen. (Unsere größten Dateien haben über 4 Mio. Datensätze.)
Ich hoffe, ich konnte Die etwas weiterhelfen
LG
Roman
|
|
07.01.2008 15:15 |
|
|
Roman Köhler
Administrator
    

Dabei seit: 29.08.2007
Beiträge: 202
Einsatzart von VDF: gewerblich Anwenderstatus: VDF-Entwickler Herkunft: Mannheim Betriebssystem: Windows XP
 |
|
Hallo Remo,
hier kommt Antwort Teil 2.
Reihenfolge:
Ich denke, Dir erklären zu wollen, dass man die Indexfelder immer in der Reihenfolge im Index stehen haben soll, nach der auch sortiert werden soll. ist schlichtweg überflüssig. Die Recnum entscheidet dann darüber, ob der Index eindeutig oder mehrdeutig ist. Die Recnum wird immer hinten angehängt.
Reindex:
Einen automatischen Fullscan, falls es tatsächlich einmal einen Index erwischt haben sollte, gibt es in VDF nicht. Ich glaube auch nicht, dass dies wirklich einen Sinn macht, da Du dadurch mit Sicherheit vormals schnelle Programme Ruckzuck in eine unmögliche Geschwindigkeit verlangsamen würdest. Stelle Dir einmal eine Großelterndatei vor, die auf eine dann unsortierte Kinddatei mit mehreren Mio. Datensätzen zugreift. Diese hat wiederum mehrere unsortierte Kinddateien mit ein paar Mio Sätzen. Klar, irgendwann bekämst Du ein Ergebnis auf den Schirm, aber ich wette mit Dir, dass Du niemals freiwillig so lange warten würdest. Außerdem gibt es immer wieder Anwendungen, wo es speziell auf die Reihenfolge der Datensätze ankommt. Ein einfaches Finden per Fullscan würde mit Sicherheit in vielen meiner Anwendungen die Ergebnisse verfälschen. Außerdem habe ich, glaube ich, vor mindestens 4 Jahren meinen letzten Reindex gemacht. Und ich arbeite mit 25 Mitarbeitern zusammen an der Original VDF-Datenbank.
Selbstbezug (Alias)
Hier würde ich Dir dringend raten, ausführlich die Online Hilfe zu Rate zu ziehen. Dies ist ein etwas komplexeres Thema, bei dem gerne einzelne Schritte vergessen werden. Und wenn das dann passiert, dann geht meist gar nichts mehr. Falls Du mit der Hilfe nicht zurecht kommst, melde Dich einfach noch einmal.
LG
Roman
|
|
07.01.2008 15:38 |
|
|
Remo
Jungspund

Dabei seit: 25.09.2007
Beiträge: 11
Themenstarter
 |
|
Hallo Roman,
danke für deine ausführlichen Antworten!
Unique Index
Es gibt da einen kleinen Unterschied: Wie du gesagt hast, muss ein Datensatz eindeutig indentifizierbar sein (bei DF recnum, bei Oracle rowid usw.). Der Datensatz ja aber nicht der Index! Ein einzelner BTree Eintrag sollte auch auf mehrere Datensätze zeigen können..
Ich hab da eine kleine Applikation bei der ich Tabellen habe wo ein einzelner Index 5GB Speicher belegt und dies ist redundanter SAN Speicher.. Da spielt das Geld plötzlich wieder eine Rolle ;-)
Dito auch mit der Performance, bei einer Tabelle mit ein paar Mio Einträge ist das egal aber wenn es etwas Grösser wird, sind zu viele Indexierungen schon hinderlich...
Aber wie du wohl richtig gesagt hast, bei DF muss ich mich damit wohl arrangieren..
Reindex
Ich kenne kein SQL System ausser DF das dies nicht tut...
Und ich hab lieber einen langsamen Zugriff als gar keine Daten. Freiwillig warten will ich natürlich nicht aber wenn der User plötzlich seine Buchungen oder sonstwas nicht mehr findet ist das ziemlich fatal..
Denke aber das eigentlich Problem ist mehr: Wieso muss ich dies so oft ausführen.. Werde da etwas Zeit investieren..
Selbstbezug (Alias)
Ja da werd ich mal die Doku durchlesen.. Wit welchem ERD Tool arbeitet ihr? Wüsste nicht wie ich bei Chen, IDEF1X, Bachmann usw. eine Alias Tabelle darstellen kann?
|
|
08.01.2008 11:38 |
|
|
Roman Köhler
Administrator
    

Dabei seit: 29.08.2007
Beiträge: 202
Einsatzart von VDF: gewerblich Anwenderstatus: VDF-Entwickler Herkunft: Mannheim Betriebssystem: Windows XP
 |
|
Hallo Remo,
unique Index
ok, ok, wenn Du natürlich solche Monstertabellen aufbauen willst, verstehe ich Deinen Wunsch Platz zu sparen.
Reindex
Wenn Du mit Tabellen arbeitest, wo die Indexdateien schon 5 G haben, kann ich Dir vesprechen, dass ein Durchsuchen der entsprechenden Datendatei (ohne Benutzung der Indexdatei) bei Dataflex mehrere Stunden, wenn nicht Tage dauern würde. Und so lange wartet garantiert kein Nutzer auf die Ausgabe seiner Daten. (Wie gesagt, keine Ahnung, wie die Sache unter SQL aussähe)
Alias
Was sind denn um Himmels willen ERD, Chen, IDEF1X, Bachmann usw.?
LG
Roman
|
|
09.01.2008 07:52 |
|
|
Remo
Jungspund

Dabei seit: 25.09.2007
Beiträge: 11
Themenstarter
 |
|
Als DB kommt schlussendlich nicht die Dataflex DB zum Einsatz, aber während der Entwicklung wäre das einfacher, allerdings müsste ich fähig sein die DB 1:1 zu übernehmen, was aber aufgrund dieser kleinen Probleme nicht ganz so einfach möglich sein wird..
Chen, IDEF1X und Bachmann sind ERD (Entity Relationship Diagram) Notation um eine DB schematisch darzustellen.. UML für Datenbanken halt
http://farm1.static.flickr.com/56/144141318_13160696c4_o.jpg
|
|
09.01.2008 12:48 |
|
|
|
|
|
 |
|