Base table — database’da satrlari fizik yoki persistent tarzda saqlanadigan asosiy relationdir. View yoki materialized view undan hosil qilinishi mumkin. Base table schema’si ustunlar, data type, constraint, default va saqlash xususiyatlarini belgilaydi.
Relation tuzilishi
Har satr bitta entity yoki hodisa yozuvini, ustunlar esa uning atributlarini ifodalaydi. Primary key satrni noyob aniqlaydi. Foreign key boshqa base table bilan referential bog‘lanishni saqlaydi.
CREATE TABLE orders (
id bigint PRIMARY KEY,
customer_id bigint NOT NULL REFERENCES customers(id),
total numeric(14,2) NOT NULL CHECK (total >= 0),
created_at timestamptz NOT NULL
);
Constraint faqat application validationiga tayanmasdan barcha writerlar uchun data integrityni database darajasida majburiy qiladi.
Fizik saqlash
Heap-organized table satrlarni indeks tartibidan mustaqil page’larda saqlaydi. Clustered table yoki index-organized table primary key tartibini fizik tashkilotning asosiga aylantirishi mumkin. Bu range read va secondary index locatoriga ta’sir qiladi.
Row format fixed va variable-length fieldlarni, null bitmap va transaction metadata’ni saqlaydi. Katta text yoki binary qiymat page tashqarisidagi storagega chiqarilishi mumkin. Compression I/Oni kamaytirib CPU xarajatini oshiradi.
MVCC va transaction
Multi-Version Concurrency Control update paytida satrning yangi versiyasini yaratishi mumkin. Reader o‘z snapshotiga mos versiyani ko‘radi, writerlar esa lock va visibility qoidalari bo‘yicha ishlaydi. Eski versiyalar vacuum yoki garbage collection bilan tozalanadi.
Uzoq transaction eski versionlarni ushlab, table bloat va transaction ID bosimini oshirishi mumkin. Monitoring dead tuple, lock va transaction age’ni kuzatadi.
Indekslar
Base table ustida primary, unique, composite, partial va expression indekslar yaratiladi. Indeks queryni tezlashtiradi, lekin har write’da yangilanadi. Keraksiz takror indeks storage va write amplificationni oshiradi.
Foreign key child ustunida indeks avtomatik yaratilmasligi mumkin. Parent delete yoki join uchun child key indekslanmasa katta scan va lock kuzatiladi. Query workload hamda referential operationlar birga baholanadi.
Partitioning
Katta table range, list yoki hash bo‘yicha partitionlarga ajratilishi mumkin. Query partition key bo‘yicha filter qilsa optimizer kerakmas partitionlarni prune qiladi. Har partition fizik table bo‘lsa ham user parent relation orqali murojaat qiladi.
Vaqt retentionida eski partitionni drop qilish millionlab satrni row-by-row delete qilishdan tez. Ammo unique constraint va foreign key butun partition seti bo‘yicha platformaga xos cheklovlarga ega.
View bilan ishlashi
Oddiy view base table querysini saqlaydi va data’ni alohida ushlamaydi. Materialized view base table natijasini fizik saqlaydi. Updatable view orqali bajarilgan write aniq base table satriga tarjima qilinadi.
Schema migration base columnni rename yoki drop qilsa dependent view, function va application querylar tekshiriladi. Compatibility view rolling deployment davrida eski nomlarni vaqtincha taqdim etishi mumkin.
Xavfsizlik
Applicationga base table’ga to‘liq permission berish o‘rniga view, stored procedure yoki row-level security orqali tor interface berilishi mumkin. Owner va runtime role ajratiladi. Migration role DDL huquqiga ega, application role esa faqat zarur DML oladi.
Audit trigger yoki database log muhim write’larni qayd etadi. Trigger business mantiqni yashirin murakkablashtirishi mumkin, shu sabab uning ordering, transaction va bulk operationga ta’siri hujjatlashtiriladi.
Bog‘liq tushunchalar
Relational table, Primary key, Foreign key, SQL view, Materialized view, MVCC, Table partitioning