Funktionen im Indexschlüssel
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21165
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 206 Mal
- Danksagung erhalten: 67 Mal
Funktionen im Indexschlüssel
Hi,
welche Erfahrung habt ihr mit Funktionen im Indexschlüssel gemacht?
Folgendes Szenario:
Das übliche Problem Artikel (Der,die,das,the, ein, eine) usw. wird immer wieder an den Anfang gesetzt und bringt dann Probleme beim Auffinden der einzelnen Datensätze. In der Vergangenheit kam dann eben eine Funktion in den Indexschlüssel, die bei Artikeln den Index nicht auf das 1.Zeichen, sondern eben ab dem 4. oder 5. Zeichen aufgebaut hat. Natürlich wurden die fehlenden Zeichen hinten wieder als Leerzeichen angepeppt, damit der Schlüssel immer gleichlang ist.
Das habe ich unter NTX gemacht, jetzt arbeite ich mit CDX. Da sollte das wohl auch ohne Probleme möglich sein.
Oder hat irgendwer vielleicht eine bessere Idee, wie man das Artikelproblem elegant in den Griff bekommt.
Sieht ja auch beim Browsen besser aus, wenn die Artikel nicht berücksichtigt werden.
welche Erfahrung habt ihr mit Funktionen im Indexschlüssel gemacht?
Folgendes Szenario:
Das übliche Problem Artikel (Der,die,das,the, ein, eine) usw. wird immer wieder an den Anfang gesetzt und bringt dann Probleme beim Auffinden der einzelnen Datensätze. In der Vergangenheit kam dann eben eine Funktion in den Indexschlüssel, die bei Artikeln den Index nicht auf das 1.Zeichen, sondern eben ab dem 4. oder 5. Zeichen aufgebaut hat. Natürlich wurden die fehlenden Zeichen hinten wieder als Leerzeichen angepeppt, damit der Schlüssel immer gleichlang ist.
Das habe ich unter NTX gemacht, jetzt arbeite ich mit CDX. Da sollte das wohl auch ohne Probleme möglich sein.
Oder hat irgendwer vielleicht eine bessere Idee, wie man das Artikelproblem elegant in den Griff bekommt.
Sieht ja auch beim Browsen besser aus, wenn die Artikel nicht berücksichtigt werden.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- AUGE_OHR
- Marvin
- Beiträge: 12903
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 44 Mal
Re: Funktionen im Indexschlüssel
hi,
gruss by OHR
Jimmy
wie wäre es mit OrdWildSeek() ... da müsstest du solche Artikel finden.Manfred hat geschrieben: Das übliche Problem Artikel (Der,die,das,the, ein, eine) usw. wird immer wieder an den Anfang gesetzt und bringt dann Probleme beim Auffinden der einzelnen Datensätze. In der Vergangenheit kam dann eben eine Funktion in den Indexschlüssel, die bei Artikeln den Index nicht auf das 1.Zeichen, sondern eben ab dem 4. oder 5. Zeichen aufgebaut hat.
gruss by OHR
Jimmy
- Manfred
- Foren-Administrator
- Beiträge: 21165
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 206 Mal
- Danksagung erhalten: 67 Mal
Das mit Ordwildseek() ist ein Super Sache, aber nicht so der richtige Hit für normales Suchen, zumal das mittendrin auch herauspflückt.
Es ging/geht mir darum, das bei einem browsen alles schön sauber ohne Artikel nacheinander auftritt. Ich möchte in diesem Fall wirklich nur von "Anfang" an sortiert haben und nicht mittendrin, das verwischt das Endbild.
Zumal Ordwildseek() bei großen Datenbanken doch eine Zeit benötigt, bis angezeigt wird. Und soweit ich es festgestellt habe, muß man das Ergebnis zwischenspeichern, vor der Ausgabe.
Es ging/geht mir darum, das bei einem browsen alles schön sauber ohne Artikel nacheinander auftritt. Ich möchte in diesem Fall wirklich nur von "Anfang" an sortiert haben und nicht mittendrin, das verwischt das Endbild.
Zumal Ordwildseek() bei großen Datenbanken doch eine Zeit benötigt, bis angezeigt wird. Und soweit ich es festgestellt habe, muß man das Ergebnis zwischenspeichern, vor der Ausgabe.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- brandelh
- Foren-Moderator
- Beiträge: 15688
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo Manfred,
wenn eine funktion() die Länge des Feldes nicht ändert (bzw. immer gleiche Länge zurückgibt) ist das OK, auch unter CDX habe ich da keine Probleme. Allerdings ist ein Zugriff auf den Index mit 'normalen' Programmen dann nicht mehr möglich ...
Bei deinem Problem, vermute ich dass es sich um Büchernamen oder ähnliches handelt und kommt gleich der nächste Einwand, woher weißt du ob das 2. Wort wirklich passt ?
Ich habe mit der 1.90 eine ähnliches Problem mit OrdWildSeek() gelöst:
wenn eine funktion() die Länge des Feldes nicht ändert (bzw. immer gleiche Länge zurückgibt) ist das OK, auch unter CDX habe ich da keine Probleme. Allerdings ist ein Zugriff auf den Index mit 'normalen' Programmen dann nicht mehr möglich ...
Bei deinem Problem, vermute ich dass es sich um Büchernamen oder ähnliches handelt und kommt gleich der nächste Einwand, woher weißt du ob das 2. Wort wirklich passt ?
Ich habe mit der 1.90 eine ähnliches Problem mit OrdWildSeek() gelöst:
Code: Alles auswählen
index on upper(Artikelbezeichnung) to artikel // upper() kann bei CDX entfallen
...
cSuch := upper("Fox")
if ordwildseek("*"+cSuch+"*") // der erste
do while found()
... mach was
ordwildseek() // nächster suchen
enddo
endif
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21165
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 206 Mal
- Danksagung erhalten: 67 Mal
Hi Hubert,
Dein Beispiel hattest Du schon mal erwähnt und ich hatte es auch ausprobiert. Bin total begeistert von der Funktion, aber wie schon oben erwähnt, es paßt nicht ganz in das Konzept.
Bei mir geht es um Musik und Filmtitel, bzw. Interpreten. In der Vergangenheit hat es immer genau gepaßt, außer.....
Der mit dem Wolf tanzt usw. Aber ein paar Verluste hat man immer.
Dein Beispiel hattest Du schon mal erwähnt und ich hatte es auch ausprobiert. Bin total begeistert von der Funktion, aber wie schon oben erwähnt, es paßt nicht ganz in das Konzept.
Bei mir geht es um Musik und Filmtitel, bzw. Interpreten. In der Vergangenheit hat es immer genau gepaßt, außer.....
Der mit dem Wolf tanzt usw. Aber ein paar Verluste hat man immer.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Manfred
- Foren-Administrator
- Beiträge: 21165
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 206 Mal
- Danksagung erhalten: 67 Mal
Hi Hubert,
ich war etwas unsicher, weil ich in der Vergangenheit unter Clipper teilweise extreme Probleme hatte mit den Indexdateien. (Hatten wir auch schon mal hier irgendwo drüber gesprochen). Es ist nie wirklich herausgekommen, woran das lag. Also hatte ich anfänglich alle Funktionen usw. aus den Indexschlüsseln entfernt unter Xbase++ und alles roh erzeugt.
Ich dachte nur, es hätte vielleicht jemand einen tollen Trick in der Schublade, wie man das mit den Artikeln noch hinkriegen kann.
Nagut, dann wollen wir mal in die Hände spucken...
ich war etwas unsicher, weil ich in der Vergangenheit unter Clipper teilweise extreme Probleme hatte mit den Indexdateien. (Hatten wir auch schon mal hier irgendwo drüber gesprochen). Es ist nie wirklich herausgekommen, woran das lag. Also hatte ich anfänglich alle Funktionen usw. aus den Indexschlüsseln entfernt unter Xbase++ und alles roh erzeugt.
Ich dachte nur, es hätte vielleicht jemand einen tollen Trick in der Schublade, wie man das mit den Artikeln noch hinkriegen kann.
Nagut, dann wollen wir mal in die Hände spucken...
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2932
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Hallo Manfred,
ich habe das bei Strassennamen mit Hausnummern (sortierung ohne Hausnummern-Berücksichtigung) mit der token-Funktion der Xbtools gemacht.
Beispiel:
OrdCreate(contpath+"aufwvb1","wvbort","upper(ort)+padright(upper(token(strasse,'0123456789/',1)),30)+dtos(termin)")
trennt mir alles ab der Hausnummer hinten ab. Schau mal bei den String-Funktionen der Xbtools nach, da gibt es schöne Sachen.
ich habe das bei Strassennamen mit Hausnummern (sortierung ohne Hausnummern-Berücksichtigung) mit der token-Funktion der Xbtools gemacht.
Beispiel:
OrdCreate(contpath+"aufwvb1","wvbort","upper(ort)+padright(upper(token(strasse,'0123456789/',1)),30)+dtos(termin)")
trennt mir alles ab der Hausnummer hinten ab. Schau mal bei den String-Funktionen der Xbtools nach, da gibt es schöne Sachen.
Viele Grüße
Wolfgang
Wolfgang
- Manfred
- Foren-Administrator
- Beiträge: 21165
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 206 Mal
- Danksagung erhalten: 67 Mal
Hi Wolfgang,
danke für den Tipp, aber eine Frage: Wozu ist das gut mit der Hausnummer? Ich dachte die Würze liegt gerade in der Hausnummer.
danke für den Tipp, aber eine Frage: Wozu ist das gut mit der Hausnummer? Ich dachte die Würze liegt gerade in der Hausnummer.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2932
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Hallo Manfred,
ich benötige das, wenn ein Kunde anruft und alle Aufträge für eine Strasse, die schon vorhanden sind, angezeigt werden sollen. Ohne diesen Index würde er
Teststr. 1
Teststr. 11
Teststr. 2
als unterschiedliche Straßen interperetieren, obwohl es dieselbe Straße ist.
ich benötige das, wenn ein Kunde anruft und alle Aufträge für eine Strasse, die schon vorhanden sind, angezeigt werden sollen. Ohne diesen Index würde er
Teststr. 1
Teststr. 11
Teststr. 2
als unterschiedliche Straßen interperetieren, obwohl es dieselbe Straße ist.
Viele Grüße
Wolfgang
Wolfgang
- Markus Walter
- Programmier-Gott
- Beiträge: 1018
- Registriert: Di, 24. Jan 2006 10:22
- Wohnort: Saarland
Hallo Manfred,
ich arbeite viel mit Funktionen in Ausdrücken und habe damit eigentlich keine Probleme (CDX, früher in Clipper SixNSX).
In der Regel enthält der Index dann eine Funktion, die den Suchstring entsprechend aufbereitet. Je nach Anwendungsfall:
- mit einer (eigenen) Token-Funktion Teile herausschneidet
- Umlaute entfernt/ersetzt
- Sonderzeichen entfernt
- ...
Am Ende der Funktion wird der entstandene Schlüssel auf feste Länge gebracht und fertig. Arbeitet hervorragend. Sinnvollerweise hat man für jeden Datensatz aber noch einen eindeutigen Schlüssel für die direkte Verknüpfung.
ich arbeite viel mit Funktionen in Ausdrücken und habe damit eigentlich keine Probleme (CDX, früher in Clipper SixNSX).
In der Regel enthält der Index dann eine Funktion, die den Suchstring entsprechend aufbereitet. Je nach Anwendungsfall:
- mit einer (eigenen) Token-Funktion Teile herausschneidet
- Umlaute entfernt/ersetzt
- Sonderzeichen entfernt
- ...
Am Ende der Funktion wird der entstandene Schlüssel auf feste Länge gebracht und fertig. Arbeitet hervorragend. Sinnvollerweise hat man für jeden Datensatz aber noch einen eindeutigen Schlüssel für die direkte Verknüpfung.
Gruß
Markus
Mitglied der XUG Saarland-Pfalz
Markus
Mitglied der XUG Saarland-Pfalz
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2932
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 13 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
- Martin Altmann
- Foren-Administrator
- Beiträge: 16501
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Auja - und dann das ganze honchnormalisieren!!
Schließlich kann es ja in jeder Strasse eine Hausnummer 1 geben
Also am Besten eine eigene Datenbank für die Strassen und eine eigene für die Hausnummern, usw. usf.
Hin zur 6. NF (Normalform)
Viele Grüße,
Martin
Schließlich kann es ja in jeder Strasse eine Hausnummer 1 geben
Also am Besten eine eigene Datenbank für die Strassen und eine eigene für die Hausnummern, usw. usf.
Hin zur 6. NF (Normalform)
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Jan
- Marvin
- Beiträge: 14641
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 87 Mal
- Kontaktdaten:
Moin Martin,
genau das ist es, was ich an Normalisierungsfanatikern nicht abkann - normalisieren bis zur Unverständlichkeit.
Normalisierung ist eine gute Sache. Keine Frage. Ich bemühe mich aus gutem Grund auch, dem in gewissen Rahmen zu folgen, weil es eben in der Tat vieles vereinfacht. Aber wie so vieles im Leben kann man es auch übertreiben.
Deshalb habe ich üblicherweise für die Hausnummer nicht eine eigene Tabelle sondern "nur" ein eigenes Feld. Wenn überhaupt, denn meist ist die Husnummer nicht auswertungswürdig bei unseren Programmen. Und es scheitert dann auch oft an den Schreibweisen. Da wird geschrieben "Theodor-Fontane-Straße", oder Theodor Fontane Straße" oder das ganze auch noch mit "Str." statt "Straße". Ganz zu scheigen von klaren Rechtschreibfehlern. Ich habe es einfach irgendwann aufgegeben
Jan
genau das ist es, was ich an Normalisierungsfanatikern nicht abkann - normalisieren bis zur Unverständlichkeit.
Normalisierung ist eine gute Sache. Keine Frage. Ich bemühe mich aus gutem Grund auch, dem in gewissen Rahmen zu folgen, weil es eben in der Tat vieles vereinfacht. Aber wie so vieles im Leben kann man es auch übertreiben.
Deshalb habe ich üblicherweise für die Hausnummer nicht eine eigene Tabelle sondern "nur" ein eigenes Feld. Wenn überhaupt, denn meist ist die Husnummer nicht auswertungswürdig bei unseren Programmen. Und es scheitert dann auch oft an den Schreibweisen. Da wird geschrieben "Theodor-Fontane-Straße", oder Theodor Fontane Straße" oder das ganze auch noch mit "Str." statt "Straße". Ganz zu scheigen von klaren Rechtschreibfehlern. Ich habe es einfach irgendwann aufgegeben
Jan