CodeGym /Kurse /SQL SELF /Einführung in Arrays: Was ist das und wann benutzt man si...

Einführung in Arrays: Was ist das und wann benutzt man sie?

SQL SELF
Level 35 , Lektion 0
Verfügbar

Du hast bestimmt schon öfter von Arrays gehört. In verschiedenen Programmiersprachen bedeuten sie fast immer das Gleiche. Aber es gibt ein paar Feinheiten.

Ein Array in PostgreSQL ist ein Datentyp, mit dem du eine Sammlung von Werten desselben Typs in einer einzigen Tabellenspalte speichern kannst. So, als würdest du nicht nur einen Eintrag, sondern gleich eine ganze "Kiste" Daten in eine Zelle packen. Das kann eine Liste von Zahlen, Strings, Daten oder sogar komplexeren Objekten sein.

Abstrakt gesprochen kannst du dir ein Array wie einen Werkzeugkasten vorstellen. Anstatt einen ganzen Satz Schlüssel in der Hand zu tragen (jeder Schlüssel als eigene Spalte/Zeile), packst du sie in einen praktischen Koffer (eine Spalte, die ein Array enthält).

Zwei Wege, Arrays zu erstellen

In PostgreSQL gibt es zwei Haupt-Syntaxen, um Arrays zu erstellen. Das ist wie zwei verschiedene Arten, einen Koffer zu packen – das Ergebnis ist gleich, aber der Ansatz ist anders:

  1. Syntax mit geschweiften Klammern {}

Das ist die kompaktere und oft genutzte Variante:

-- Array von Strings
'{"apfel", "banane", "kirsche"}'

-- Array von Zahlen
'{1, 2, 3, 4, 5}'

-- Array von Daten
'{"2023-01-01", "2023-01-02", "2023-01-03"}'
  1. Syntax mit dem Konstruktor ARRAY[]

Eine explizitere und lesbarere Methode:

-- Array von Strings
ARRAY['apfel', 'banane', 'kirsche']

-- Array von Zahlen
ARRAY[1, 2, 3, 4, 5]

-- Array von Daten
ARRAY['2023-01-01'::DATE, '2023-01-02'::DATE, '2023-01-03'::DATE]
Wichtig:

Beide Syntaxen funktionieren gleich! Die Wahl hängt von deinen Vorlieben und dem Kontext ab. Das ist ungefähr wie die Wahl zwischen for und while Schleifen in anderen Programmiersprachen – funktional sind sie gleichwertig, aber manchmal ist eine Variante praktischer.

Wann benutzt man Arrays?

Arrays sind ein Superpower-Feature von PostgreSQL, das dir hilft, Aufgaben zu lösen, bei denen es unpraktisch wäre, zusätzliche Tabellen oder Spalten zu erstellen. Sie sind super für:

  1. Speichern von Listen, Tags oder Kategorien

Stell dir vor, wir bauen eine Datenbank für einen Online-Shop. Jedes Produkt kann mehrere Tags haben, zum Beispiel:

  • Für ein T-Shirt könnten die Tags sein: ["kleidung", "herren", "sport"].
  • Für Kopfhörer: ["elektronik", "kabellos", "gadgets"].

Mit Arrays kannst du diese Tags in einer Spalte speichern, ohne eine eigene Tabelle für Tags zu bauen – das spart Platz und macht die Datenstruktur einfacher.

-- Produkttabelle mit Array von Tags
CREATE TABLE products (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    tags TEXT[]  -- Array von Strings für Tags
);

-- Beispiel-Daten
INSERT INTO products (name, tags)
VALUES
    ('T-Shirt', ARRAY['kleidung', 'herren', 'sport']),
    ('Kopfhörer', ARRAY['elektronik', 'kabellos', 'gadgets']);
  1. Speichern einer Bestellliste

Wenn du mit Bestellungen arbeitest, kann ein Array helfen, die Liste der Produkte in einer Bestellung zu speichern:

-- Bestelltabelle mit Array von Produkt-IDs
CREATE TABLE orders (
    id SERIAL PRIMARY KEY,
    customer_name TEXT,
    product_ids INTEGER[]  -- Array von Produkt-IDs
);

-- Beispiel-Daten
INSERT INTO orders (customer_name, product_ids)
VALUES
    ('Anna', ARRAY[1, 2, 3]),
    ('Otto', ARRAY[4, 5]);

Jetzt hat jede Bestellung eine Liste der gekauften Produkte. Praktisch, oder?

  1. Einfache Konfigurationen und Einstellungen

    Wenn du einfache Listen von Einstellungen oder User-Präferenzen speichern willst:

    CREATE TABLE user_preferences (
    user_id INTEGER PRIMARY KEY,
    notification_types TEXT[],
    allowed_days INTEGER[]  -- Wochentage: 1-7
    );
    

Vergleich von Arrays mit anderen Datentypen

Hier ist wichtig zu verstehen, dass Arrays einfach ein weiteres Tool im PostgreSQL-Arsenal sind, das nicht für jede Aufgabe passt. Eine Alternative zu Arrays kann zum Beispiel eine Relationstabelle (Many-to-Many-Beziehung) oder der Datentyp JSON/JSONB sein.

Arrays vs JSONB

Arrays sind praktisch, wenn du genau weißt, dass du mehrere Werte desselben Typs speichern willst. Sie sind einfacher, schneller und brauchen weniger Speicher.

JSONB ist besser für komplexere Strukturen, z.B. wenn du Objekte mit flexibler Struktur speichern willst. Allerdings ist JSONB oft etwas komplizierter in der Verarbeitung.

Beispiel für Array und JSONB mit denselben Daten:

-- Array
ARRAY['kleidung', 'herren', 'sport']

-- JSONB
'["kleidung", "herren", "sport"]'::JSONB

Wenn du oft Dinge wie Sortieren, Filtern oder Indexieren machen willst, sind Arrays meistens die bessere Wahl.

Beispiel für den Einsatz von Arrays bei echten Aufgaben

Stell dir vor: Du entwickelst eine App zur Anwesenheitskontrolle an der Uni. Jede Vorlesung hat eine Liste von Studierenden, die teilgenommen haben, aber du willst keine extra Tabelle für die Verbindung zwischen Studierenden und Vorlesungen bauen. Stattdessen kannst du Arrays nutzen:

-- Vorlesungstabelle mit Array von Studierenden
CREATE TABLE lectures (
    id SERIAL PRIMARY KEY,
    topic TEXT NOT NULL,
    students INTEGER[]  -- Array von Studierenden-IDs
);

-- Beispiel-Daten
INSERT INTO lectures (topic, students)
VALUES
    ('Datenbanken', ARRAY[101, 102, 103]),
    ('Algorithmen', ARRAY[104, 105]);

Jetzt kannst du ganz easy die Liste der Studierenden für jede Vorlesung abfragen und auch Studierende zum Array hinzufügen oder entfernen.

Wichtige Punkte beim Einsatz von Arrays in PostgreSQL

  1. Der Datentyp im Array muss einheitlich sein. PostgreSQL erlaubt es nicht, z.B. Strings und Zahlen im selben Array zu mischen.
-- Funktioniert
ARRAY[1, 2, 3]  -- Array von Zahlen

-- Fehler: Mischung aus String und Zahl
ARRAY['apfel', 42, 'kirsche']
  1. Die Indizierung von Array-Elementen startet bei 1, nicht bei 0. Denk dran, falls du aus Programmiersprachen kommst, wo Arrays bei 0 starten (Python, JavaScript, C++ usw.).
  2. NULL-Unterstützung: Arrays können NULL-Werte enthalten
  3. Mehrdimensionalität: PostgreSQL unterstützt mehrdimensionale Arrays
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION