Frage Speichern von Arrays in der Datenbank


Ich frage mich, ob es wirklich gute Praxis ist, Arrays in der Datenbank zu speichern? Ich neige dazu zu verwenden json_encode eher, als serialize, aber fragte sich nur, ob es eine gute Idee ist. Wenn nicht, dann kann ich ein paar kleine Änderungen vornehmen und das Array einfach mit einem Komma implodieren.


13
2017-09-09 16:37


Ursprung


Antworten:


Nein, es ist eine schreckliche Übung. Bitte verzichten Sie auf CSV, JSON *, serialize() oder JEDE Art von serialisierten Daten in einem relational Datenbank. Denormalisierung ist fast immer eine schlechte Idee - tun Sie es nicht, wenn Sie nicht wirklich wissen, was Sie tun, oder Sie werden anfangen zu fragen Fragen wie: Dies, Dies, Dies, Dies, ...

Wenn Sie dies tun, verlieren Sie oder es behindert Ihre Fähigkeit,

  • Benutzen JOINs.
  • Suchen oder ändern Sie ein bestimmtes Element
  • Erzwingen referenzielle Integrität
  • Profitieren Sie von der Indexnutzung
  • Und es verschwendet auch Platz

Es klingt vielleicht pedantisch, aber die Leute zu sehen ist eines meiner ärgsten Ärgernisse - vor allem angesichts der Fülle von Fragen, die zu SO gestellt wurden, die vermieden werden würden, wenn sie richtig wären.

Hier ist der richtige Weg um One-to-Many- und Many-to-Many-Beziehungen in einem RDBMS zu erstellen.

*Obwohl einige SQL-Datenbanken integrierte Unterstützung für JSON haben, ist es oft besser, Ihre Daten neu zu strukturieren, sodass Sie diese nicht benötigen


47
2017-09-09 16:40



Hängt von Ihrem Nutzungsverhalten ab. Wenn Sie auf kleinere Teile des Arrays zugreifen müssen (z. B. zur Verwendung in einer where-Klausel oder ähnlichem), ist das eine schlechte Idee - Sie verlieren alle Vorteile, wenn Sie Daten in einer relationalen Datenbank speichern, indem Sie die Daten zuordenbar. Sie werden mit großen Overhead enden, der dieses kleine Stück Daten wieder und wieder und wieder extrahiert.

Auf der anderen Seite, wenn Sie nur die Datenbank als Datenspeicher verwenden und das gespeicherte Array nie trennen müssen - einfach einfügen und abrufen, dann gibt es wahrscheinlich kein Problem, außer Platzverschwendung, als serialisiert Das / json'd-Format ist tendenziell "wortwörtlich" und beansprucht mehr Speicherplatz als die Rohdaten selbst.


7
2017-09-09 16:40