Modül dersleri (1/4)
Gelişmiş veri türleri ve ENUM'lar
Önceki derste temel CREATE TABLE komutunu gördük. Şimdi PostgreSQL'in etki alanlarımızı daha kesin ve güvenli bir şekilde modellemek için sunduğu bazı gelişmiş veri türlerini inceleyelim.
Sayısal ve metin türleri
PostgreSQL'in sayı ve metin için çeşitli türleri vardır. Doğru olanı seçmek hem doğrulama hem de depolama alanı açısından yardımcı olur.
CREATE TABLE advanced_products (
id SERIAL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
description TEXT,
-- NUMERIC(p,s) dove p = cifre totali, s = cifre decimali
price NUMERIC(10, 2) NOT NULL,
featured BOOLEAN DEFAULT FALSE
);TEXTvsVARCHAR(n): Postgres'te performans aynıdır.VARCHAR(n)yalnızca eklenen uzunluğu veritabanı düzeyinde açıkça sınırlamak istediğinizde kullanırsınız.NUMERIC(10, 2): Para veya aritmetik hassasiyet için mükemmeldir. Burada en fazla 8 tam sayı rakamına ve 2 ondalık rakama (toplamda 10) izin verilir.10.555eklerseniz Postgres bunu10.56değerine yuvarlar.
UUID türü
Web'de gösterilen güvenli tanımlayıcılar için (URL'lerdeki genel kimlikler gibi), klasik SERIAL artışına göre genellikle UUID tercih edilir.
CREATE TABLE public_orders (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
customer TEXT NOT NULL,
total NUMERIC(10, 2)
);ENUM (Numaralandırmalar)
Genellikle bir sütunun önceden tanımlanmış birkaç değerden yalnızca birini içermesi gerekir (ör. sipariş durumu: "yeni", "ödedi", "gönderildi"). Bir yaklaşım CHECK anahtar sözcüğünü kullanmaktır, ancak PostgreSQL özel ENUM türleri sunar.
-- Dobbiamo prima creare il tipo:
CREATE TYPE order_status AS ENUM ('nuovo', 'pagato', 'spedito', 'cancellato');
-- Ora possiamo usarlo in una tabella:
CREATE TABLE orders_demo (
id SERIAL PRIMARY KEY,
status order_status NOT NULL DEFAULT 'nuovo'
);Bu, hiç kimsenin geçersiz bir durum ekleyememesini garanti ederek veri tutarlılığını korur.
Deneyin
Şunları içeren bir 'user_reviews' tablosu oluşturun: id (SERIAL pk), test_id (varsayılan gen_random_uuid() ile UUID), puan (tamsayı boş değil) ve içerik (TEXT). Diğer alanların hiçbiri türün ötesinde açık kısıtlamalara ihtiyaç duymaz.
İpucu göster
CREATE TABLE user_reviews (...) ve ardından çeşitli alanları yazın. Virgülleri hatırla.
3 denemeden sonra çözüm mevcut
Alıştırmayı gözden geçirin
İlk önce 'admin' ve 'user' değerlerine sahip 'user_role' ENUM tipini oluşturun. Ardından kimliği (SERIAL pk) ve rolü (az önce oluşturduğunuz tür, NOT NULL) içeren 'enum_users' tablosunu oluşturun.
İpucu göster
Şunu unutmayın; iki ifadeyi (CREATE TYPE ve CREATE TABLE) ayırmak için.
3 denemeden sonra çözüm mevcut