wie kann man konsistente Datenhaltung erreichen

Alles, was PHP betrifft, kann hier besprochen werden.

wie kann man konsistente Datenhaltung erreichen

Postby juergen&lx » 03. March 2006 00:25

Hallo Zusammen,

Frage: wie kann man vermeiden, dass Daten in Form von doppelten Datensätzen vorhanden sind?

Bisher wird jeder zukünftige Datensatz vor der Eingabe manuell in der DB gesucht. Autoren und Komponisten werden mit eingeschlossen.
Dabei suche ich nur nach bestimmten Worten, von denen ich denke, dass sie die höchste Trefferzahl bringen.
Speziell bei Liedertiteln gibt es häufig gleichlautende bzw gleiche Titel ( Form Haupttitel / Untertitel ) oder auch mit vertauschten Titeln ( Form Untertitel / Haupttitel ). Wenn man den Liedertext hat, kann man evtl. in verschiedenen Büchern nachschlagen und vergleichen.

Diese Problem wird sicher häufiger auftreten. Oder nicht :?:
Jürgen
juergen&lx
 
Posts: 154
Joined: 18. February 2004 21:36
Location: in einem Dorf am Rande des Strombergs
Operating System: Linux

Postby Wiedmann » 03. March 2006 01:05

Guten Morgen Jürgen :-)

Die Schwierigkeit dürfte tatsächlich sein, dass du auch sozusagen "Schreibfehler" mit berücksichten willst.

Im einfachsten Fall musst du sonst ja nur einen UNIQUE Index über die betrefenden Spalten anlegen und MySQL sagt dir dann beim INSERT das der Datensatz doppelt ist.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby KingCrunch » 03. March 2006 01:12

Für Tippfehler oder ähnliches könntest du Ähnlichkeitsvergleiche über alle Datensätze machen, was allerdings echt hart wird. Einerseits sind Ähnlichkeitsvergleiche ziemlich aufwendig und zudem müsstest du jeden Datensatz durchlaufen, was nochma eine lineare Steigerung der sowieso schon komplexen Ähnlichkeitsvergleiche bedeutet (für diese vergleiche hat PHP übrigens ne Funktion "similar_text").

btw: Songtextdatenbanken und ähnliches sind nur bedingt legal, da gab es in letzter Zeit diverse Abmahnungen
Nicht jeder Fehler ist ein Bug ...
KingCrunch
 
Posts: 1724
Joined: 26. November 2005 19:25

Postby juergen&lx » 03. March 2006 02:09

Hallo KingCrunch, hallo Wiedmann, (alphabetical order) ;)

Wiedmann wrote:Im einfachsten Fall musst du sonst ja nur einen UNIQUE Index über die betrefenden Spalten anlegen und MySQL sagt dir dann beim INSERT das der Datensatz doppelt ist.
Einen UNIQUE über mehrere Spalten? :?

KingCrunch wrote:btw: Songtextdatenbanken und ähnliches sind nur bedingt legal, da gab es in letzter Zeit diverse Abmahnungen
Bei mir gibt es keinerlei Songtexte o.ä. zum downloaden und für diese Infos habe ich die schriftliche Zustimmung der entsprechenden Verlage. Auch die bunten Bildchen werden da ausgeliehen. Alles ganz legal.

Hier ist nochmal die Indizes
Code: Select all
PRIMARY         PRIMARY     1854  titel_id
h_titel_2       INDEX       1854  h_titel
s_titel_2       INDEX        618  s_titel
o_titel         INDEX        370  o_titel
searchstr_2     INDEX        927  searchstr
Text_von_2      INDEX        618  Text_von
translated_by_2 INDEX        231  translated_by
Musik_von_2     INDEX        618  Musik_von
theme           INDEX          3  theme
bible           INDEX        309  bible
Text_von        FULLTEXT     927  Text_von
translated_by   FULLTEXT     927  translated_by
Musik_von       FULLTEXT    1854  Musik_von
searchstr       FULLTEXT     370  searchstr
h_titel         FULLTEXT     370  h_titel
s_titel         FULLTEXT    1854  s_titel

Jürgen
juergen&lx
 
Posts: 154
Joined: 18. February 2004 21:36
Location: in einem Dorf am Rande des Strombergs
Operating System: Linux

Postby Wiedmann » 03. March 2006 02:15

Einen UNIQUE über mehrere Spalten?

Yup. ist kein Problem:
http://dev.mysql.com/doc/refman/5.0/en/ ... index.html

So erkennt er dann nur die Datensätze als doppelt, wo alle im Index erfasste Spalten gleich sind.

(Beim Anlegen macht man halt meist nur einen Index über eine Spalte UNIQUE).
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby KingCrunch » 03. March 2006 02:20

Bei mir gibt es keinerlei Songtexte o.ä. zum downloaden und für diese Infos habe ich die schriftliche Zustimmung der entsprechenden Verlage. Auch die bunten Bildchen werden da ausgeliehen. Alles ganz legal.
Dann ist ja gut. Die Welt ist schlecht und du bist mittendrin
Nicht jeder Fehler ist ein Bug ...
KingCrunch
 
Posts: 1724
Joined: 26. November 2005 19:25

Postby juergen&lx » 03. March 2006 02:22

thx for the hints
werde ich gleich nochmal probieren,
dumme Frage noch: muß ich die anderen INDEX/FULLTEXT löschen :?:
Jürgen
juergen&lx
 
Posts: 154
Joined: 18. February 2004 21:36
Location: in einem Dorf am Rande des Strombergs
Operating System: Linux

Postby juergen&lx » 03. March 2006 02:51

Code: Select all
ALTER TABLE `titel` ADD UNIQUE `llix` ( `h_titel` , `s_titel` , `o_titel` , `Text_von` , `translated_by` , `Musik_von` )

MySQL meldet: Dokumentation
#1071 - Specified key was too long; max key length is 1000 bytes

und wo muß ich jetzt abschneiden?
Jürgen
juergen&lx
 
Posts: 154
Joined: 18. February 2004 21:36
Location: in einem Dorf am Rande des Strombergs
Operating System: Linux

Postby Wiedmann » 03. March 2006 02:55

Du kannst für jede Spalte festlegen wieviel Zeichen der Spalte für den Vergleich herangezogen werden.

Alle Spalten zusammen halt nur 1000 Zeichen (bei latin1).
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby juergen&lx » 03. March 2006 03:03

ich Danke Wiedmann,
dann noch 'ne gute Nacht
Jürgen
juergen&lx
 
Posts: 154
Joined: 18. February 2004 21:36
Location: in einem Dorf am Rande des Strombergs
Operating System: Linux


Return to PHP

Who is online

Users browsing this forum: No registered users and 14 guests