6 Stimmen

PHP/MySQL - Speichern von Array-Daten als JSON, schlechte Praxis?

Ich frage mich, ob es eine gute Praxis ist, ein Array als JSON-String in einem MySQL-Textfeld zu speichern.

Ich erstelle eine Rechnung, die es dem Benutzer ermöglicht, eine unbegrenzte Anzahl von Produkten zur Rechnung hinzuzufügen. Wenn das Formular abgeschickt wird, werden alle leeren Elemente entfernt, aber in der Regel bleiben 2-5 Elemente übrig, je nachdem. Jedes Element hat eine SKU, einen Preis, einen Namen und eine Beschreibung.

Meine Optionen für diese Situation sind (1) eine neue Produkttabelle zu erstellen, jedes Element als neue Zeile hinzuzufügen, sie mit der Rechnungstabelle zu verknüpfen und beide Tabellen beim Zugriff auf Daten abzurufen. Oder (2), alle Produktdaten als einzelnes JSON-Textfeld in der Rechnungstabelle zu speichern, und dann erstelle oder greife ich nicht auf eine andere Tabelle zu.

Da ich ziemlich streng im Umgang mit MySQL-Programmierung bin, habe ich das Gefühl, dass die Verwendung von JSON in MySQL missbilligt würde. Habe ich recht? Kann mir jemand Licht ins Dunkel bringen?

15voto

zerkms Punkte 239362

Wenn alles, was Sie brauchen, nur speichern ist - dann ist es keine schlechte Praxis.

Aber wenn Sie irgendeine Art von Verarbeitung, Sortierung oder Ähnlichem durchführen müssen - müssen Sie es normalisieren.

6voto

rockerest Punkte 10287

Weil andere Ihre Frage direkter beantwortet haben, werde ich einen Randansatz wählen und mich stattdessen auf die Zukunftswartbarkeit konzentrieren.

Das Speichern einer variablen Anzahl von Elementen, die nur danach schreien, eine Datenbankeinheit zu sein (SKU, Preis, Name, Beschreibung) als JSON mag jetzt in Ordnung sein, aber es wird zu einer Menge Datenverdopplung führen.

Erstellen Sie stattdessen wie bereits gesagt eine Tabelle für alle Produkte. Erstellen Sie dann eine weitere Tabelle für invoices_have_products. Sie können dann jede Zeile aus invoices_have_products abrufen, bei der die Rechnungs-ID übereinstimmt, und dann jede Zeile aus products abrufen, bei der die Produkt-ID den Zeilen entspricht, die Sie aus invoices_have_products abgerufen haben.

Es mag jetzt ein wenig mühsam sein, aber wenn all Ihre Daten in ordentlichen Tabellen vorliegen und leicht abfragbar sind, werden Sie viel glücklicher sein. Denken Sie an den Albtraum, Berichte über Millionen von Textfeldern mit JSON auszuführen. Absolut gruselig.

Um einen Teil Ihrer Frage zu beantworten: Nein, ich denke nicht, dass dies gute Praxis ist, und ehrlich gesagt sieht es ein wenig nach schlechter Praxis aus.

0voto

Chris Punkte 4684

Ich bin kein MySQL-Experte, aber ich denke, es hängt davon ab, was du erreichen möchtest. Möchtest du, dass die Produkte, die du in einer Rechnung gespeichert hast, durchsuchbar sind? Wenn ja, ist es besser, eine relationale Datenbankstruktur zu verwenden.

Wenn du nicht suchst, könntest du die Daten als JSON-String speichern oder einfach als serialisiertes Array und dir dadurch die Verwendung von JSON ersparen.

Es kommt wirklich auf deine Bedürfnisse an.

0voto

Jeremy Punkte 4549

Wenn Sie es in JSON speichern, können Sie nicht mit SQL danach abfragen. Zum Beispiel kann ich nicht herausfinden, alle Rechnungen, die mehr als 3 von Produkt A gekauft haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X