Ich möchte ein einfaches Tag-System mit PHP und MySQL erstellen, so dass Benutzer einige Tags über Formular hinzufügen können. Meine Frage ist, sollte ich die Tags als ein Array in einer einzelnen Datenbankspalte speichern? z.B. "tag1, tag2, tag3" .. oder ich sollte separate Spalten in der Datenbanktabelle haben, wo ich jedes Tag in jeder Spalte speichern sollte. ich hoffe meine Frage ist klar. Danke.Wie kann man Tags (Schlüsselwörter) in der Datenbank speichern?
Antwort
würde ich wahrscheinlich auch nicht sagen. Verwenden Sie eine Viele-zu-Viele-Beziehung zwischen Tags und dem zu markierenden Objekt. Zum Beispiel, wenn das Ding markiert ist eine Frage ist, könnte die Tabellen wie folgt aussehen:
Question:
QuestionId
Title
Body
Tag:
TagId
Name
QuestionTags:
QuestionId
TagId
könnten Sie verwenden serialise und unserialise die Schlüsselwörter in einem Feld zu speichern. Mehr Infos hier http://php.net/manual/en/function.serialize.php
So etwas ...
$keywords = array('apple', 'pear', 'banana', 'peach');
$keywords_serialized = serialize($keywords);
$sql = INSERT INTO dbtable (keywords) VALUES ($keywords_serialized);
Wie Leistung zu töten ... –
Es sollte eine sehr seltene Sache sein, dass eine serialisierte Zeichenfolge in einer Datenbank gespeichert werden sollte. –
danke Ich habe heute etwas gelernt – user466764
kamen in dieser Frage heute auch und sammelte einige Ideen, die hier, und obwohl die Frage nicht ganz neu ist, werde ich meine verlassen Lösung:
ich denke, die Antwort von Klaus Byskov Hoffmann war nicht schlecht, aber ich würde hinzufügen und speichern Sie die Tag-Liste als viele-zu-viele Tabelle, wie er sagte, sondern auch als serialisierte Zeichenfolge in irgendeiner Form (entweder über serialize wie user466764 gesagt, oder einfach ein Komma getrenntes Ding wie du selbst gesagt hast, das mit i behandelt werden könnte mplode/explode) in der Haupttabelle.
ja, ich weiß: den gleichen Datenspeicher zweimal ist nicht sehr gut mit vielen Datenbank Perfektionisten erhalten, da sie die Gefahr des Erhaltens Inkonsistenzen trägt, aber ich würde für die Leistung und Einfachheit es auf diese Weise tun:
Die Viele-zu-Viele-Tabelle (Tag-Tabelle) dient nur zur Suche. Um die Suchleistung zu erhöhen, beschränke ich den Zugriff auf diese Tabelle NUR auf die Suche (und natürlich müssen wir sie aktualisieren, wenn die Tags bearbeitet werden), aber niemals abfragen, nur um die Tags irgendwo anzuzeigen/aufzulisten. und die serialisierte Tag-Liste ist für jeden Ort, an dem Sie den betreffenden Artikel oder Gegenstand sehen - wenn Sie diesen Gegenstand anzeigen, haben Sie die Tabelle bereits und machen jedesmal eine weitere Abfrage an die Tag-Tabelle, wenn Sie diese Seite anzeigen wollen unnötig, wenn Sie die Liste bereits in der Haupttabelle haben. Stellen Sie sicher, dass Sie beim Aktualisieren der Tags vorsichtig sind, um sie immer an beiden Orten zu aktualisieren, vorzugsweise über eine einzige Setter-Funktion, die beides tut, und Sie sollten keine Probleme mit Inkonsistenzen haben.
Stimme völlig zu. Die Optimierung der Seitenladezeit sollte genauso wichtig sein wie die Normalisierung der Datenbank. – KalC
- 1. Der beste Weg, um Tags in einer Datenbank zu speichern?
- 2. Wie werden Tags in der Datenbank modelliert?
- 3. Extract Schlüsselwörter/Tags aus Zeichenfolge mit preg_match_all
- 4. Wie definiert man Schlüsselwörter in Microsoft.Diagnostics.Tracing.EventSource?
- 5. Wie kann ich Login-Daten in der Datenbank speichern ....?
- 6. Wie kann ich Tags aus der TFS-Datenbank abfragen?
- 7. Objekte in der Datenbank speichern
- 8. Speichern EXIF-Informationen in der Datenbank
- 9. Wie "wishlist" in der Datenbank speichern?
- 10. Wie speichern Sie Menüs in der Datenbank?
- 11. Wie sicher zu speichern/abrufen HTML-Tags in der Datenbank in Schienen?
- 12. Dynamische Checkbox - Speichern in der Datenbank
- 13. django Bild in der Datenbank speichern
- 14. Wie kann man docx/txt/pdf oder andere Dateitypen mit C# in der Datenbank speichern?
- 15. Wie kann man nach fehlgeschlagenen ActiveRecord-Validierungen etwas in der Datenbank speichern?
- 16. Wie Sie Daten in der Datenbank in HTML5 speichern
- 17. wie man prägte, mutige Schlüsselwörter zu machen?
- 18. Wie kann man flüssige Template-Tags entfernen?
- 19. Wie speichert man Passwörter in der Datenbank?
- 20. MVC kann keine Daten in der Datenbank speichern
- 21. Speichern XAML-Datei in der Datenbank
- 22. Kann nicht Variable zugreifen in der Datenbank speichern
- 23. Speichern von Werten in der Datenbank
- 24. Speichern von Arrays in der Datenbank serialisieren?
- 25. So speichern Sie Sprachaufzeichnungen in der Datenbank
- 26. kann Sitzungsvariable nicht in Datenbank speichern
- 27. Speichern von HTML in der Datenbank
- 28. Mehrere Anhänge in der Datenbank speichern, phpmyadmin
- 29. Speichern von Objekt in der Datenbank Spalte
- 30. Soll ich GCM in der Datenbank speichern?
Dieser Weg bietet Skalierbarkeit und ermöglicht Datenbank-Optimierung mit Indizes. Gute Antwort. –
Ich bin auf dieser Seite gelandet auf der Suche nach Empfehlungen für die Aktualisierung einer Tag-Liste in einem solchen Schema. Wie würdest du es machen? DELETE FROM QuestionTags WHERE QuestionId = 123 und dann INSERT INFO QuestionTags alle verbleibenden und neuen Tags? Es scheint der einfachste für den Entwickler, aber vielleicht nicht der beste für die Leistung ... – Henno
@Henno Ich bin mir nicht sicher, ob ich verstehe, was du meinst. Kannst du eine separate Frage stellen? –