Schema — ma’lumotlar bazasidagi obyektlarning tuzilishi, nomlanishi, o‘zaro bog‘lanishi va ularga qo‘llanadigan qoidalarni ifodalovchi mantiqiy model. Relational ma’lumotlar bazasida schema table, view, index, sequence, function, procedure, trigger va constraint kabi obyektlarni bir nomlar hududida birlashtirishi mumkin.
Schema atamasi ikki ma’noda ishlatiladi. Birinchisi — database obyektlari joylashadigan namespace. Ikkinchisi — ma’lumotning umumiy strukturasi, ya’ni qaysi table va fieldlar mavjudligi hamda ular qanday bog‘langanini anglatadi.
Namespace sifatidagi schema
Bir database ichida bir xil nomli obyektlar turli schema’larda mavjud bo‘lishi mumkin.
Masalan:
sales.orders
archive.orders
Bu yerda orders nomli ikkita table bor, ammo ular boshqa schema’ga tegishli.
Schema nomi obyektni to‘liq aniqlashga yordam beradi:
SELECT *
FROM sales.orders;
Obyektlarni guruhlash
Schema database obyektlarini mantiqiy guruhlarga ajratadi.
Masalan:
auth— foydalanuvchi va ruxsatlar;billing— to‘lov va hisoblar;content— maqola va media;audit— audit yozuvlari;reporting— analitik view va materialized view’lar.
Bu katta database ichida ownership va navigatsiyani soddalashtiradi.
Table strukturasi
Data schema table ustunlari va ularning xususiyatlarini belgilaydi.
Misol:
CREATE TABLE users (
id BIGINT PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
created_at TIMESTAMP NOT NULL
);
Bu ta’rif:
- column nomi;
- data type;
NOT NULL;- primary key;
- unique constraint
kabi qoidalarni o‘z ichiga oladi.
Data type
Schema har field qaysi turdagi qiymatni saqlashini belgilaydi.
Keng tarqalgan type’lar:
- integer;
- decimal;
- string;
- boolean;
- date;
- timestamp;
- JSON;
- binary.
To‘g‘ri type validation, storage hajmi, index va query performance’iga ta’sir qiladi.
Pul qiymatini floating-point type’da saqlash precision muammosiga olib kelishi mumkin. Bunday holatda decimal yoki eng kichik pul birligidagi integer ishlatiladi.
Relationship
Table’lar orasidagi bog‘lanish foreign key bilan ifodalanishi mumkin.
CREATE TABLE orders (
id BIGINT PRIMARY KEY,
user_id BIGINT NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(id)
);
Bu orders.user_id qiymati mavjud users.idga tegishli bo‘lishini talab qiladi.
Relationship cardinality quyidagicha bo‘lishi mumkin:
- one-to-one;
- one-to-many;
- many-to-many.
Constraint
Schema ma’lumot yaxlitligini constraintlar orqali saqlaydi.
Asosiy turlari:
- primary key;
- foreign key;
- unique;
- check;
- not null;
- exclusionga o‘xshash maxsus constraintlar.
Application validationi mavjud bo‘lsa ham database constraint parallel request va boshqa clientlardan keladigan noto‘g‘ri data’ni to‘xtatadi.
Search path
Ayrim database tizimlarida schema nomi yozilmasa, obyekt search path bo‘yicha qidiriladi.
Masalan:
SELECT *
FROM users;
qaysi users table’iga murojaat qilish search pathga bog‘liq bo‘lishi mumkin.
Search path noto‘g‘ri boshqarilsa:
yuz beradi.
Muhim query’larda to‘liq schema nomidan foydalanish aniqroq.
Schema ownership
Schema owneri obyekt yaratish va boshqarish huquqiga ega bo‘lishi mumkin.
Permissionlar quyidagicha ajratiladi:
Application userga butun database bo‘yicha ortiqcha huquq berilmaydi.
Schema migration
Application rivojlanganda schema ham o‘zgaradi.
Migration misollari:
- yangi table;
- yangi column;
- index qo‘shish;
- constraint yaratish;
- column type o‘zgartirish;
- eski fieldni olib tashlash.
Migration version control’da saqlanadi va environmentlar bo‘yicha bir xil tartibda bajariladi.
Backward-compatible o‘zgarish
Rolling deployment paytida eski va yangi application versiyasi bir muddat bir schema bilan ishlashi mumkin.
Xavfsiz bosqichli o‘zgarish:
- yangi nullable column qo‘shish;
- yangi code eski va yangi field bilan ishlashi;
- data backfill qilish;
- yangi fieldni majburiy qilish;
- eski fielddan foydalanishni to‘xtatish;
- keyingi release’da eski fieldni o‘chirish.
Columnni birdan rename qilish eski application instance’larini buzishi mumkin.
Schema drift
Production schema migration fayllaridagi kutilgan holatdan farq qilsa schema drift yuz beradi.
Sabablar:
- qo‘lda DDL bajarish;
- migrationning qisman tugashi;
- environmentlar orasidagi farq;
- hotfix;
- rollbackning noto‘liq bajarilishi.
Schema introspection va migration history driftni aniqlashga yordam beradi.
Schema registry
Event streaming va serialization tizimlarida schema registry message formatlarini versionlaydi.
U:
- fieldlar;
- type;
- compatibility;
- schema ID;
- version
ni saqlaydi.
Producer va consumer bir xil event contract asosida ishlaydi.
Bu database schema’dan boshqa tizim bo‘lsa ham asosiy maqsad — data tuzilishini nazorat qilish.
Schema-on-write
Data storage’ga yozilishidan oldin schema bo‘yicha tekshiriladi.
Relational database va curated warehouse table’lari bunga misol.
Afzalligi — data oldindan tartibli va type-safe.
Kamchiligi — yangi data shaklini qabul qilishdan oldin schema o‘zgartirish kerak.
Schema-on-read
Data avval xom holatda saqlanib, o‘qish vaqtida schema qo‘llanadi.
Bu data lake va ayrim log storage’larda uchraydi.
Afzalligi — turli formatlarni tez qabul qilish.
Kamchiligi — noto‘g‘ri type va fieldlar query vaqtida aniqlanishi mumkin.
Dokumentatsiya
Schema ma’lumotlar bazasining amaliy hujjati hisoblanadi.
Qo‘shimcha tavsiflarda:
ko‘rsatiladi.
Faqat table nomi business ma’noni har doim tushuntirib bermaydi.
Bog‘liq tushunchalar
Database, Table, Column, Namespace, Data type, Constraint, Foreign key, Schema migration, Schema registry, Schema drift