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?
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%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:
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%Tags und Links sqlite many-to-many