AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Was ist die beste Lösung für eine Keywort-Filterung per SQL ?
Thema durchsuchen
Ansicht
Themen-Optionen

Was ist die beste Lösung für eine Keywort-Filterung per SQL ?

Ein Thema von Rollo62 · begonnen am 9. Jul 2021 · letzter Beitrag vom 12. Jul 2021
 
Rollo62

Registriert seit: 15. Mär 2007
3.926 Beiträge
 
Delphi 12 Athens
 
#1

Was ist die beste Lösung für eine Keywort-Filterung per SQL ?

  Alt 9. Jul 2021, 09:41
Datenbank: ANY • Version: 1.0 • Zugriff über: FireDac
Hallo zusammen,

ich möchte gerne ein neues System aufbauen, was Tabellen nach Keyworten filtern kann.

Der Gedanke ist eine globale Keywort-Tabelle zu haben,
Code:
TabKeywort
Id       Keywort
1         Apfel
2         Birne
3         Banane
4         Grün
5         Gelb
...
998       Früchte
999       Obst
und eine Ziel-Tabelle, die ich eigentlich filtern möchte
Code:
TabZiel
Id       Descr    
101       Lorem1
102       Lorem2
103       Lorem3
104       Lorem4
...
dazu gibt es zu jedem Record eine Mapping-Tabelle, welche die entsprechenden Keyworte auflistet
Code:
TabMap
Id       IdZiel    IdKeywort
201       101        1      // Ziel 101 ==> Apfel, grün      
202       101        4
203       102        2      // Ziel 102 ==> Birne, gelb, Früchte, Obst
204       102        5
205       102        998
206       102        999
207       103        3      // Ziel 103 ==> Banane, gelb
208       103        5
...
Sowas in der Art, so das jeder Eintrag in TabZiel eine 1:n Liste von individuellen Keyworten bekommt.

Wie würde man das optimal anlegen, so dass es sich gut nach Keyworten filten lässt ?

Also es müsste so ungefähr gehen, aber meine Fragen sind:
Geht das besser/effektiver, um nach variablen Listen von Text-Keyworten zu filtern ?
Gibt es dafür Lösung, die genau auf so einen Fall ausgelegt ist, mit variablern Parametern ?
Wie bekomme ich in/vor dem SQL-SELECT die Keyworte am Besten als String-Parameter rein, und diese dann noch CaseInsenitiv oder LIKE gesucht ?

Code:
//Hier könnte man auch was Verschachteltes davorbauen, statt die Integer Id's von aussen reinzugeben,
//direkt mit String-Keys reinzukommen, und diese in aus der TabKeywork zu IdKeywort zu mappen
SELECT z.* 
FROM TabZiel z, TabMap m, TabKeywort k
WHERE ( z.Id       = m.IdZiel )
AND  (( m.IdKeywort = :PInt1   )
  OR  ( m.IdKeywort = :PInt2   )
  OR  ( m.IdKeywort = :PInt3   )
  ... //<== Hier ist es unschön, weil die Parameter-Liste jeweils unterschiedlich lang ist
ORDER BY z.Id
;
Meine Überlegungen zu den drei Tabellen sind:
  • Die TabZiel Tabelle kann mal sehr groß werden (weiss noch nicht genau), weil Texte/Links/Sonstwas da drin sein können,
    deshalb sollte das zwischengeschaltete Mapping dafür optimal sein (mit Integer Id's).
  • Die TabMap Tabelle wird dann entsprechend noch größer (was die RecCount betrifft),
    deshalb auch hier reines Integer-Mapping um Platz zu sparen.
  • Die TabKeywort Tabelle wird auch anwachsen mit der Zeit, aber überschaubar bleiben,
    deshalb können mögliche Keyworte schnell und leicht gefunden werden.

Oder mache ich mir da zuviel Gedanken, und man könnte statt Integer-ID's auch GUUID's, Hashes oder sonstwas Modernes verwenden ?
Weil die Datenbanken mittlerweile vielleicht so perfekt sind, dass die das selbst optimieren können
(es geht mit dabei um DB's von Sqlite, zu MySql, Postgres bis MsSql, das liegt noch nicht fest, deshalb Standard-SQL ).

Macht man sowas heutzutage überhaupt besser mit Mongo (aber ich würde schon gerne bei SQL bleiben) ?

Geändert von Rollo62 ( 9. Jul 2021 um 09:47 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz