Abgleich aus mehreren Beziehungen

8

Ich habe eine "Posts" -Tabelle. Jeder Post-Datensatz kann ein oder mehrere Tags haben.  Wenn ich die Tags in einer einzelnen Spalte als kommagetrennte Zeichenfolge abspeichere, kann ich die Posts mit dem Tag "Abc" und dem Tag "Def" leicht finden oder sogar einen Teilvergleich durchführen.

Ich benutze sqlite und eine "FTS" Tabelle mit dieser Methode und es funktioniert gut, aber jemand sagte mir, dass es eine schlechte Praxis ist und ich die Tags in einer anderen Tabelle speichern und JOINs verwenden sollte. Wenn ich die Tags in einer anderen Tabelle speichere und eine Beziehung zwischen diesen beiden Tabellen erstelle, wie finde ich Posts mit beiden Tags "Abc" und "Def" in einer einzigen Abfrage? Ist es möglich?

    
Elfy 05.03.2015, 12:21
quelle

2 Antworten

1

Das ist in der Tat eine schlechte Design-Praxis.

Sie erhalten eine langsame Performance, da Sie String-Operationen für den Spaltenwert durchführen müssen, um die Tags zu trennen. Daher können Indizes nicht verwendet werden. Und es ist gegen die Normalisierungsregeln des Datenbankentwurfs.

Ein besseres Design wäre

%Vor%

Um alle Beiträge zu erhalten, müssen beide Tags

haben %Vor%     
juergen d 02.05.2015 16:25
quelle
0

Wenn Sie Ihre Datenbank normalisieren möchten, würde ich diese Informationen auf jeden Fall in mehrere Tabellen aufteilen. Ich habe ein Schema und einige Beispielabfragen geschrieben, die zeigen, wie Sie die Daten herausziehen können. Sie können dies hier sehen: Ссылка

Grundsätzlich hätten Sie 3 Tabellen:

  • POST-Tabelle: enthält die Post-Informationen.
  • POSTTAGS-Tabelle: Ist die Verbindungstabelle, die die IDs enthält, aus der POST-Tabelle und der TAG-Tabelle
  • TAG-Tabelle: enthält die Tag-Informationen

Auf diese Weise speichern Sie niemals die gleichen Tag-Informationen zweimal.

Schließlich ist hier eine Beispielabfrage von der sqlfiddle, die oben gepostet wird:

%Vor%     
Sam Abushanab 28.04.2015 19:56
quelle

Tags und Links