2017-04-20 5 views
0

Ich mache einen Blog, wo ein Beitrag eine variable Anzahl von Textfeldern hat. So könnte es 1 oder vielleicht 30 haben. Das Problem ist, dass ich nicht sicher bin, was die beste Vorgehensweise für das Einrichten der Datenbank ist. Um dieses Problem zu beheben, verwende ich eine Eins-zu-viele-Beziehung. DieseWie richte ich eine MySQL-Datenbankstruktur mit variablen Spalten ein?

ist, wie meine aktuelle Datenbankstruktur sieht aus wie jetzt:

Beiträge Tabelle:

posts 
- id 
- title 

Posttexttabelle:

post_text 
- id 
- post_id 
- text 

Und meine Pivot-Tabelle:

post_text 
- post_id 
- post_text_id 

Dies ist was ich mir vorstellen kann. Ein anderer Weg wäre, die Post-Tabelle auf die maximale Anzahl von Spalten für den Text zu erhöhen. Dies würde jedoch zu vielen leeren Spalten führen, da sie nicht alle verwendet werden würden. Aber ich finde die Methode, die ich benutze, etwas zu kompliziert?

Irgendwelche Gedanken?

Antwort

0

Sie können keine variable Anzahl von Spalten in MySQL haben, da Sie das Schema vorher definieren müssen, das später nicht geändert werden kann.

Wenn Sie nicht mit MySQL arbeiten, können Sie einige NoSQL DB wie MongoDB ausprobieren, die gut zu Ihrem Anwendungsfall passt.

+0

Ich sehe, ich bin nicht vertraut mit diesen Datenbankstrukturen, aber ich werde sie auschecken. Danke – Jasper

0

Wenn es wesentlich ist, dass Ihr Beitrag mehrere Texteinträge benötigt, ist die Eins-zu-viele-Beziehung die richtige Vorgehensweise, um das Problem anzugehen. Der einzige Vorschlag, den ich für Sie haben könnte, ist, dass Ihre Tabellennamen zu eher indikativen Zwecken verbessert werden könnten.

Als Beispiel:

posts 
post_text_fields 
text_fields_in_post 

während diese Methode erscheinen „zu kompliziert“ es ist eigentlich die einfachste Lösung, wenn MySQL mit einer Eins-zu-viele-Beziehung aufzubauen.

Alternativ zu MySQL sind NoSQL-Lösungen, die zuvor von @demolisher in ihrer Antwort erwähnt wurden. Diese Lösungen orientieren sich eher an brauchbaren Tabellenstrukturen wie JSON und eignen sich möglicherweise besser für Anwendungen, die ein schwaches Schema erfordern. In diesem Bereich würde ich auch empfehlen MongoDB

0

MySQL 5.7 unterstützt eine JSON data type, so dass Sie jetzt semi-strukturierte Daten zusammen mit Ihrem regulären Schema speichern können.

Aber ich verstehe dein Problem nicht. Wenn Sie eine Eins-zu-viele-Beziehung zwischen Posts und post_test haben, benötigen Sie nicht mehrere Textspalten. Sie müssen nur mehrere Zeilen für jeden Post mit einem Text pro Zeile speichern.

Ich habe keine Ahnung, wofür Ihre dritte Tabelle ist. Es hat den gleichen Namen wie post_text, und Sie brauchen es nicht für eine Eins-zu-viele-Beziehung. Möglicherweise benötigen Sie es für eine Viele-zu-Viele-Beziehung.

+0

Ihr Recht. Das sollte der richtige Ansatz sein. Über den Fehler hinweg, da ich eigentlich keinen Pivot-Tisch brauche. Die Textfelder sind post-exklusiv – Jasper

Verwandte Themen