To'g'ri ma'lumot turlarini tanlash va cheklovlar qo'yish yaxlitlikni ta'minlaydi.

Asosiy ma'lumot turlari

-- Butun sonlar
SMALLINT      -- -32,768 dan 32,767
INTEGER       -- -2B dan 2B
BIGINT        -- juda katta sonlar
SERIAL        -- avtomatik oshuvchi

-- Kasr sonlar
DECIMAL(10,2) -- 10 ta raqam, 2 ta kasr
NUMERIC(10,2) -- DECIMAL bilan bir xil
REAL          -- 6 ta aniqlik
DOUBLE PRECISION  -- 15 ta aniqlik

-- Matn
VARCHAR(100)  -- maksimal 100 belgi
TEXT          -- cheksiz matn
CHAR(10)      -- aniq 10 belgi

-- Sana/vaqt
DATE          -- 2024-01-15
TIME          -- 14:30:00
TIMESTAMP     -- 2024-01-15 14:30:00
TIMESTAMPTZ   -- vaqt mintaqasi bilan

-- Boshqalar
BOOLEAN       -- TRUE/FALSE
UUID          -- noyob identifikator
JSONB         -- JSON (indekslanadi)

Cheklovlar

CREATE TABLE talabalar (
    id SERIAL PRIMARY KEY,
    ism VARCHAR(100) NOT NULL,
    email VARCHAR(200) UNIQUE NOT NULL,
    yosh INTEGER CHECK (yosh BETWEEN 14 AND 80),
    kurs_id INTEGER REFERENCES kurslar(id) ON DELETE SET NULL,
    yaratilgan TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Cheklov qo'shish va o'chirish

-- Cheklov qo'shish
ALTER TABLE talabalar ADD CONSTRAINT chk_yosh CHECK (yosh > 0);

-- Cheklov o'chirish
ALTER TABLE talabalar DROP CONSTRAINT chk_yosh;

-- Ustun qo'shish
ALTER TABLE talabalar ADD COLUMN telefon VARCHAR(20);

-- Ustun o'chirish
ALTER TABLE talabalar DROP COLUMN telefon;