CodeGym /Kurslar /SQL SELF /Massivlərə giriş: bu nədir və nə vaxt istifadə etmək lazı...

Massivlərə giriş: bu nədir və nə vaxt istifadə etmək lazımdır

SQL SELF
Səviyyə , Dərs
Mövcuddur

Yəqin ki, artıq bir neçə dəfə massivlər haqqında eşitmisən. Müxtəlif proqramlaşdırma dillərində onlar demək olar ki, eyni şeyi ifadə edir. Amma bəzi nüanslar var.

PostgreSQL-də massiv — bu, bir sütunda eyni tipli dəyərlər toplusunu saxlamağa imkan verən data tipidir. Elə bil ki, bir qeyd yox, bütöv bir "qutu" məlumatı hüceyrəyə yazırsan. Bu, ədədlər, sətirlər, tarixlər və ya hətta daha mürəkkəb obyektlərin siyahısı ola bilər.

Abstrakt desək, massiv alət qutusu kimidir. Ayrı-ayrı açarları əllə daşımaq (hər açar ayrıca sütun/sətir kimi) əvəzinə, onları rahat bir çemodana qoyursan (bir sütun, massiv saxlayır).

Massiv yaratmağın iki yolu

PostgreSQL-də massiv yaratmaq üçün iki əsas sintaksis var. Bu, çemodanı iki fərqli üsulla yığmaq kimidir — nəticə eynidir, amma yanaşma fərqlidir:

  1. Qıvrım mötərizələrlə sintaksis {}

Bu, daha qısa və tez-tez istifadə olunan üsuldur:

-- Sətir massiv
'{"alma", "banan", "vişnə"}'

-- Ədəd massiv
'{1, 2, 3, 4, 5}'

-- Tarix massiv
'{"2023-01-01", "2023-01-02", "2023-01-03"}'
  1. Konstruktor ilə sintaksis ARRAY[]

Daha aydın və oxunaqlı üsul:

-- Sətir massiv
ARRAY['alma', 'banan', 'vişnə']

-- Ədəd massiv
ARRAY[1, 2, 3, 4, 5]

-- Tarix massiv
ARRAY['2023-01-01'::DATE, '2023-01-02'::DATE, '2023-01-03'::DATE]
Vacibdir:

hər iki sintaksis eyni işləyir! Seçim sənin üstünlüyündən və istifadə kontekstindən asılıdır. Bu, başqa proqramlaşdırma dillərində forwhile dövrləri arasında seçim kimidir — funksional olaraq eynidirlər, amma konkret vəziyyətdə biri daha rahat ola bilər.

Massivləri nə vaxt istifadə etmək lazımdır

Massivlər — PostgreSQL-in super gücüdür, əlavə cədvəl və ya sütun yaratmaq narahatdırsa, tapşırıqları həll etməyə imkan verir. Onlar aşağıdakılar üçün əladır:

  1. Siyahıların, teqlərin və ya kateqoriyaların saxlanması

Təsəvvür elə ki, biz internet mağazası üçün verilənlər bazası yaradırıq. Hər məhsulun bir neçə teqi ola bilər, məsələn:

  • Köynək üçün teqlər: ["geyim", "kişi", "idman"].
  • Qulaqlıqlar üçün teqlər: ["elektronika", "simsiz", "qadcetlər"].

Massivlərlə bu teqləri bir sütunda saxlaya bilərsən, teqlər üçün ayrıca cədvəl yaratmağa ehtiyac olmur, həm yerə qənaət edir, həm də data strukturunu sadələşdirir.

-- Teqlər massivli məhsullar cədvəli
CREATE TABLE products (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    tags TEXT[]  -- Teqlər üçün sətir massiv
);

-- Data nümunəsi
INSERT INTO products (name, tags)
VALUES
    ('Köynək', ARRAY['geyim', 'kişi', 'idman']),
    ('Qulaqlıq', ARRAY['elektronika', 'simsiz', 'qadcetlər']);
  1. Sifariş siyahısının saxlanması

Sifarişlərlə işləyirsənsə, massiv bir sifarişdə məhsulların siyahısını saxlamağa kömək edə bilər:

-- Məhsul ID-ləri massivli sifarişlər cədvəli
CREATE TABLE orders (
    id SERIAL PRIMARY KEY,
    customer_name TEXT,
    product_ids INTEGER[]  -- Məhsul identifikatorları üçün massiv
);

-- Data nümunəsi
INSERT INTO orders (customer_name, product_ids)
VALUES
    ('Anna', ARRAY[1, 2, 3]),
    ('Otto', ARRAY[4, 5]);

İndi hər sifarişdə alınan məhsulların siyahısı var. Rahatdır, düzdür?

  1. Sadə konfiqurasiya və ayarlar

    İstifadəçi üçün sadə ayar və ya üstünlüklər siyahısı saxlamaq lazım olanda:

    CREATE TABLE user_preferences (
    user_id INTEGER PRIMARY KEY,
    notification_types TEXT[],
    allowed_days INTEGER[]  -- həftənin günləri: 1-7
    );
    

Massivlərin digər data tipləri ilə müqayisəsi

Burada başa düşmək vacibdir ki, massivlər — bu sadəcə PostgreSQL-in alət qutusunda əlavə bir vasitədir, hər tapşırıq üçün uyğun deyil. Məsələn, massivlərə alternativ olaraq əlaqə cədvəli (çoxdan-çoxa əlaqə) və ya JSON/JSONB data tipindən istifadə etmək olar.

Massivlər vs JSONB

Massivlər o zaman rahatdır ki, eyni tipli bir neçə dəyər saxlayacağını dəqiq bilirsən. Onlar daha sadə, sürətli və az yer tutur.

JSONB isə daha mürəkkəb strukturlar üçün uyğundur, məsələn, çevik strukturlu obyektləri saxlamaq lazım olanda. Amma JSONB ilə işləmək bir az çətin ola bilər.

Eyni data üçün massiv və JSONB nümunəsi:

-- Massiv
ARRAY['geyim', 'kişi', 'idman']

-- JSONB
'["geyim", "kişi", "idman"]'::JSONB

Əgər tez-tez sortlama, filtrasiya və ya indeksasiya kimi əməliyyatlar edəcəksənsə, massivlər daha yaxşı seçimdir.

Massivlərin real tapşırıqlarda istifadəsinə nümunə

Təsəvvür elə: universitetdə davamiyyət üçün tətbiq hazırlayırsan. Hər dərsin onu ziyarət edən tələbələrin siyahısı var, amma tələbələri dərslərlə əlaqələndirmək üçün ayrıca cədvəl yaratmağa ehtiyac yoxdur. Bunun əvəzinə massivlərdən istifadə etmək olar:

-- Tələbə massivli dərslər cədvəli
CREATE TABLE lectures (
    id SERIAL PRIMARY KEY,
    topic TEXT NOT NULL,
    students INTEGER[]  -- Tələbə identifikatorları üçün massiv
);

-- Data nümunəsi
INSERT INTO lectures (topic, students)
VALUES
    ('Verilənlər bazası', ARRAY[101, 102, 103]),
    ('Alqoritmlər', ARRAY[104, 105]);

İndi istənilən dərs üçün tələbələrin siyahısını asanlıqla sorğulaya, həmçinin massivə tələbə əlavə və ya silə bilərsən.

PostgreSQL-də massivlərdən istifadə zamanı vacib məqamlar

  1. Massivin içindəki data tipi eyni olmalıdır. PostgreSQL, məsələn, bir massivdə sətir və ədəd qarışdırmağa icazə vermir.
-- İşləyir
ARRAY[1, 2, 3]  -- Ədəd massiv

-- Səhv: sətir və ədəd qarışdırılıb
ARRAY['alma', 42, 'vişnə']
  1. Massiv elementlərinin indeksləşməsi 1-dən başlayır, 0-dan yox. Əgər Python, JavaScript, C++ və s. kimi dillərdə indeksləşməyə öyrəşmisənsə, bunu unutma.
  2. NULL dəstəyi: massivlərdə NULL dəyərlər ola bilər
  3. Çoxölçülülük: PostgreSQL çoxölçülü massivləri dəstəkləyir
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION