| | | | |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Erfahrener Benutzer Registriert seit: 05.04.2005
Beiträge: 1.333
![]() | man könnte die tabelle normalisieren, allerdings würde das fast nur die performance verbessern.
__________________ "Wenn du nicht weißt, was du tust: Machs mit Eleganz!" (Murphy's Gesetze) |
| |
| | |
| Moderator Registriert seit: 11.05.2008
Beiträge: 6.267
![]() ![]() ![]() ![]() ![]() ![]() ![]() | Hallo, ob es sich um wenige oder viel Datensätze handelt ist für eine Datenbankoptimierung erstmal nicht entscheidend. Schliesslich könnte es ja sein, dass ihr die Suche einmal erweitern wollt, da sollte das Datenbankschema dann schon solide sein. Zum Thema Normalisierung kannst du dich mal hier einlesen, falls es für dich in Frage kommt: Normalisierung (Datenbank) – Wikipedia Schreibvarianten abfangen kannst du mit Levenshtein oder Soundex. Die Levenshtein-Distanz: Levenshtein-Distanz – Wikipedia errechnet, wieviele Buchstaben-Tausch- oder -Verschiebeoperationen nötig sind, um von Wort A zu Wort B zu gelangen. Von Spass-Buch zu Spaßbuch wären es 3 (oder 4 für Groß-Kleinschreibung, beachtest du aber nicht), also relativ wenig gemessen an der Länge des Wortes. Natürlich kannst du auch automatisch in die Suche eine "ss" -> "ß", "ä" => "ae", .. Konvertierung vornehmen. Die Volltextsuche der Suchmaschine scheidet aus, da es ja Schlagwörter und keine langen Texte sind. Soundex() berechnet für jedes Wort einen Klangwert, so daß Meyer und Meier beispielsweise einen gleichen Soundex-Wert bekommen. Levenshtein ist allerdings noch nicht in MySQL implementiert soweit ich weiß. Daher könnte vielleicht das hier für dich interessant sein: codejanitor Levenshtein Distance as a MySQL Stored Function Die Datenbank normalisiert könnte nun so aussehen: Code: author id | name book id | title publisher id | title term id | term | soundex_value book_has_publisher book_id | publisher_id book_has_author book_id | author_id book_has_term book_id | term_id Code: SELECT title
FROM term AS t
INNER JOIN book_has_term AS bt
bt.term_id = t.id
INNER JOIN book AS b
ON bt.book_id = b.id
WHERE SOUNDEX('Spass') SOUNDS LIKE t.soundex_value
GROUP BY b.id
__________________ "Nuschel ich?" - "Was?" Geändert von Chriz (29.07.2009 um 20:02 Uhr). |
| |
| | |
| moderatives Dielektrikum Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse: Fortgeschritten ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() | Meine 2 cents: Verschlagwortungs- oder Taggingprinzipien sind i.A. nicht flexibel angelegt. Synonyme o.ä. werden hier eigentlich nicht angewendet. Ihr könntet aber eine Art künstliche Inhaltsbeschreibung aus Schlagworten schaffen, die man mit einem üblichen Suchmechanismus auswertet. Hier hätte man keine normalisierte Form, sondern eine durch Leerzeichen getrennte Wortmenge, die man einfach durch LIKE auswerten kann. Deshalb würde ich auch von SOUNDEX und Co abraten und statt dessen Verfahren wie Stemmer verwenden und die Wortliste beim Eintragen des Datensatzes erstellen. Suchworte würden dann zuerst gestemmt, dann durch eine Synonymersetzung geschickt (ebenfalls Stemming) und anschliessend an LIKE verfüttert.
__________________ -- One pixel is still too big. Please make it smaller. ASAP. Initiative Mittelstand. Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers. -- |
| |
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Projekt anbieten und suchen | toptom | Beitragsarchiv | 4 | 30.01.2009 15:30 |
| Feedback zu Einsteiger-Tutorial APF | dr.e. | PHP-Fortgeschrittene | 0 | 10.08.2008 22:42 |
| Mail Feedback mit Include eingebunden | mac-x | PHP Tipps 2008 | 6 | 28.07.2008 15:03 |
| Feedback von URL-Aufruf in Variable speichern | PHP Tipps 2007 | 3 | 17.12.2005 18:50 | |
| Feedback | BEGINNER-L | Off-Topic Diskussionen | 12 | 11.11.2005 18:20 |
| [Erledigt] Wir sind neu hier! Bitte um Feedback! | Off-Topic Diskussionen | 5 | 23.03.2005 17:30 | |