CodeGym /Kursy /SQL SELF /Wprowadzenie do tablic: co to jest i kiedy ich używać

Wprowadzenie do tablic: co to jest i kiedy ich używać

SQL SELF
Poziom 35 , Lekcja 0
Dostępny

Pewnie już nie raz słyszałeś o tablicach. W różnych językach programowania znaczą prawie to samo. Ale są pewne niuanse.

Tablica w PostgreSQL to typ danych, który pozwala przechowywać zestaw wartości jednego typu w jednej kolumnie tabeli. To tak, jakbyś wrzucał nie jeden wpis, a całą "pudło" danych do jednej komórki. Może to być lista liczb, stringów, dat albo nawet bardziej złożonych obiektów.

Abstrakcyjnie mówiąc, tablicę można porównać do skrzynki na narzędzia. Zamiast nosić cały zestaw kluczy w rękach (każdy klucz jako osobna kolumna/wiersz), wrzucasz je do wygodnej walizki (jedna kolumna zawierająca tablicę).

Dwa sposoby tworzenia tablic

W PostgreSQL są dwa główne sposoby na stworzenie tablicy. To jak dwa różne sposoby pakowania walizki — efekt ten sam, ale podejście inne:

  1. Składnia z klamrami {}

To bardziej kompaktowy i często używany sposób:

-- Tablica stringów
'{"jabłko", "banan", "wiśnia"}'

-- Tablica liczb
'{1, 2, 3, 4, 5}'

-- Tablica dat
'{"2023-01-01", "2023-01-02", "2023-01-03"}'
  1. Składnia z konstruktorem ARRAY[]

Bardziej jawny i czytelny sposób:

-- Tablica stringów
ARRAY['jabłko', 'banan', 'wiśnia']

-- Tablica liczb
ARRAY[1, 2, 3, 4, 5]

-- Tablica dat
ARRAY['2023-01-01'::DATE, '2023-01-02'::DATE, '2023-01-03'::DATE]
Ważne:

oba sposoby działają tak samo! Wybór zależy od twoich preferencji i kontekstu użycia. To trochę jak wybór między for a while w innych językach programowania — funkcjonalnie są równoważne, ale jeden może być wygodniejszy w konkretnej sytuacji.

Kiedy używać tablic

Tablice to supermoc PostgreSQL, która pozwala rozwiązywać zadania, gdzie nie ma sensu tworzyć dodatkowych tabel czy kolumn. Świetnie sprawdzają się do:

  1. Przechowywania list, tagów lub kategorii

Wyobraź sobie, że tworzymy bazę danych dla sklepu internetowego. Każdy produkt może mieć kilka tagów, na przykład:

  • Dla koszulki mogą to być tagi: ["ubrania", "męskie", "sport"].
  • Dla słuchawek tagi: ["elektronika", "bezprzewodowe", "gadżety"].

Z tablicami możesz przechowywać te tagi w jednej kolumnie bez potrzeby tworzenia osobnej tabeli na tagi, oszczędzając miejsce i upraszczając strukturę danych.

-- Tabela produktów z tablicą tagów
CREATE TABLE products (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    tags TEXT[]  -- Tablica stringów na tagi
);

-- Przykładowe dane
INSERT INTO products (name, tags)
VALUES
    ('Koszulka', ARRAY['ubrania', 'męskie', 'sport']),
    ('Słuchawki', ARRAY['elektronika', 'bezprzewodowe', 'gadżety']);
  1. Przechowywania listy zamówień

Jeśli pracujesz z zamówieniami, tablica może pomóc przechować listę produktów w jednym zamówieniu:

-- Tabela zamówień z tablicą ID produktów
CREATE TABLE orders (
    id SERIAL PRIMARY KEY,
    customer_name TEXT,
    product_ids INTEGER[]  -- Tablica identyfikatorów produktów
);

-- Przykładowe dane
INSERT INTO orders (customer_name, product_ids)
VALUES
    ('Anna', ARRAY[1, 2, 3]),
    ('Otto', ARRAY[4, 5]);

Teraz każde zamówienie ma listę produktów, które zostały kupione. Wygodne, nie?

  1. Prostych konfiguracji i ustawień

    Kiedy trzeba przechować proste listy ustawień lub preferencji użytkownika:

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

Porównanie tablic z innymi typami danych

Ważne, żeby zrozumieć, że tablice to po prostu kolejne narzędzie w arsenale PostgreSQL, które nie zawsze jest najlepszym wyborem. Na przykład alternatywą dla tablic może być użycie tabeli powiązań (relacja "wiele do wielu") albo typu danych JSON/JSONB.

Tablice vs JSONB

Tablice są wygodne, gdy dokładnie wiesz, że będziesz przechowywać kilka wartości tego samego typu. Są prostsze, szybsze i zajmują mniej miejsca.

JSONB nadaje się do bardziej złożonych struktur, np. jeśli musisz przechowywać obiekty o elastycznej strukturze. Jednak JSONB może być trudniejszy w obsłudze.

Przykład tablicy i JSONB dla tego samego zestawu danych:

-- Tablica
ARRAY['ubrania', 'męskie', 'sport']

-- JSONB
'["ubrania", "męskie", "sport"]'::JSONB

Jeśli często musisz robić takie rzeczy jak sortowanie, filtrowanie czy indeksowanie, tablice będą lepszym wyborem.

Przykład użycia tablic w realnych zadaniach

Wyobraź sobie sytuację: tworzysz aplikację do rejestracji obecności na uczelni. Każdy wykład ma listę studentów, którzy byli obecni, ale nie musisz tworzyć osobnej tabeli do powiązania studentów z wykładami. Zamiast tego możesz użyć tablic:

-- Tabela wykładów z tablicą studentów
CREATE TABLE lectures (
    id SERIAL PRIMARY KEY,
    topic TEXT NOT NULL,
    students INTEGER[]  -- Tablica identyfikatorów studentów
);

-- Przykładowe dane
INSERT INTO lectures (topic, students)
VALUES
    ('Bazy danych', ARRAY[101, 102, 103]),
    ('Algorytmy', ARRAY[104, 105]);

Teraz łatwo możesz pobrać listę studentów dla dowolnego wykładu, a także dodać lub usunąć studenta z tablicy.

Ważne rzeczy przy używaniu tablic w PostgreSQL

  1. Typ danych w tablicy musi być jednorodny. PostgreSQL nie pozwala mieszać np. stringów i liczb w jednej tablicy.
-- Działa
ARRAY[1, 2, 3]  -- Tablica liczb

-- Błąd: mieszanie stringów i liczb
ARRAY['jabłko', 42, 'wiśnia']
  1. Indeksowanie elementów tablicy zaczyna się od 1, a nie od 0. Pamiętaj o tym, jeśli jesteś przyzwyczajony do języków, gdzie indeksowanie zaczyna się od 0 (Python, JavaScript, C++ itd.).
  2. Obsługa NULL: tablice mogą zawierać wartości NULL
  3. Wielowymiarowość: PostgreSQL obsługuje tablice wielowymiarowe
2
Zadanie
SQL SELF, poziom 35, lekcja 0
Niedostępne
Tworzenie tabeli z tablicami
Tworzenie tabeli z tablicami
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION