Also mache ich eine Datenbank für ein persönliches Projekt, nur um mehr als nur meine Füße mit PostgreSQL und bestimmten Sprachen und Anwendungen, die eine PostgreSQL-Datenbank verwenden können, anzufassen.
Ich bin zu der Erkenntnis gekommen, dass die Verwendung eines Arrays nicht unbedingt sogar konform ist (Arrays sind nicht atomar, oder?) mit 1NF. Meine Frage ist also: Gibt es auf diese Weise einen Mangel an Effizienz oder Datensicherheit? Sollte ich früh lernen, keine Arrays zu verwenden?
Kurze Antwort auf den Titel : Nein
Etwas längere Antwort :
Sie sollten lernen, Arrays bei Bedarf zu verwenden. Arrays sind selbst kein schlechtes Design, sie sind so atomar wie ein Charakter variierendes Feld (Array of Characters, nein?) Und sie existieren, um unser Leben einfacher und unsere Datenbanken schneller und leichter zu machen. Es gibt Probleme hinsichtlich der Portabilität (die meisten Datenbanksysteme unterstützen Arrays nicht oder anders als Postgres)
Beispiel:
Sie haben einen Blog mit Posts und Tags, und jeder Post kann 0 oder mehr Tags enthalten. Das erste, was einem einfällt, ist, eine andere Tabelle mit zwei Spalten postid
und tagid
zu erstellen und die Tags in dieser Tabelle zuzuordnen.
Wenn wir Beiträge mit tagid durchsuchen müssen, ist die extra Tabelle notwendig (natürlich mit entsprechenden Indizes).
Aber wenn wir nur möchten, dass die Tag-Informationen als zusätzliche Informationen des Posts angezeigt werden, können wir ganz einfach eine Integer-Array-Spalte in die Tabelle der Posts einfügen und die Informationen daraus extrahieren. Dies kann immer noch mit der zusätzlichen Tabelle geschehen, aber die Verwendung eines Arrays reduziert die Größe der Datenbank (keine zusätzlichen Tabellen oder zusätzliche Zeilen) und vereinfacht die Abfrage, indem wir unsere SELECT-Abfragen mit einer Tabelle ohne Verknüpfung ausführen und einfacher zu verstehen scheinen mit dem menschlichen Auge (der letzte Teil ist im Auge des Betrachters, aber ich denke, ich spreche hier für eine Mehrheit). Wenn unsere Tags vorgeladen sind, ist nicht einmal ein Join erforderlich.
Das Beispiel mag schlecht sein, aber es ist das erste, was mir in den Sinn kam.
Fazit :
Arrays sind nicht notwendig. Sie können schädlich sein, wenn Sie sie falsch verwenden. Sie können ohne sie leben und haben eine große, schnelle und optimierte Datenbank. Wenn Sie die Portabilität in Betracht ziehen (z. B. das Umschreiben Ihres Systems in andere Datenbanken), dürfen Sie keine Arrays verwenden.
Wenn Sie sicher sind, dass Sie bei Postgres bleiben, können Sie sicher Arrays verwenden, wo Sie es finden. Sie existieren aus einem bestimmten Grund und sind weder schlechtes Design noch nicht konform. Wenn Sie sie an den richtigen Stellen verwenden, können sie ein wenig mit der Einfachheit der Datenbankstrukturen und Ihrem Code sowie der Optimierung von Speicherplatz und Geschwindigkeit helfen. Das ist alles.
Ob ein Array atomar ist, hängt davon ab, woran Sie interessiert sind. Wenn Sie generell das gesamte Array wollen, dann ist es atomar. Wenn Sie sich mehr für die einzelnen Elemente interessieren, wird es als Struktur verwendet. Ein Textfeld ist im Grunde eine Liste von Zeichen. Normalerweise interessiert uns jedoch die ganze Zeichenfolge.
Aus heutiger Sicht entpacken viele Frameworks und ORMs die Array-Typen von PostgreSQL nicht automatisch. Auch wenn Sie die Datenbank z. MySQL dann wirst du
Ebenso können Fremdschlüsseleinschränkungen nicht zu einem Array hinzugefügt werden (außer es ist in 9.3 - nein scheint nicht zu sein).
Kurze Antwort: Ja, es ist ein schlechtes Design. Die Verwendung von Arrays garantiert, dass Ihr Design nicht 1NF ist, denn um 1NF zu sein, darf es keine wiederholenden Werte geben. Das richtige Design ist eindeutig: Erstellen Sie eine andere Tabelle für die Werte des Arrays und verbinden Sie sie, wenn Sie sie alle benötigen.
Arrays sind eine Besonderheit von Postgres. Es gibt nichts Standard daran. Unter bestimmten Umständen mag es immer noch das richtige Werkzeug für den Job sein, aber ich würde immer noch versuchen, sie zu vermeiden. Sie sind ein Feature der letzten Instanz, und sie werden Sie an Postgres binden. Vielleicht interessiert es Sie nicht, aber es gibt (IMO) viel bessere Gründe, mit Postgres als Arrays verheiratet zu sein.
Das größte Problem mit Arrays ist, dass sie eine Krücke sind. Du kennst sie schon und du willst sie benutzen, weil sie dir vertraut sind. Aber sie funktionieren nicht ganz so, wie Sie es erwarten, und sie erlauben Ihnen nur, ein echtes Verständnis von SQL und relationalen Datenbanken zu verschieben. Es ist viel besser zu warten, bis man gezwungen ist, sie zu benutzen, als sie zu lernen und nach Möglichkeiten zu suchen, sich darauf zu verlassen.
Tags und Links database postgresql database-design