Bosh sahifa Wiki Virtual table

Virtual table

Virtual table — satr va ustun ko‘rinishini taqdim etadigan, lekin ma’lumotni odatiy base table kabi mustaqil saqlashi shart bo‘lmagan database obyektidir. SQL view, system catalog, table-valued function va tashqi data wrapper shu modelga kirishi mumkin. Natija query, metadata yoki external source’dan dinamik hosil qilinadi.

Oddiy view

View saqlangan SELECT ta’rifidir:

CREATE VIEW active_users AS
SELECT id, name, department_id
FROM users
WHERE disabled_at IS NULL;

SELECT * FROM active_users bajarilganda optimizer view querysini tashqi query bilan birlashtiradi. Oddiy view natija satrlarini alohida saqlamaydi. Base table o‘zgarsa keyingi query yangi holatni ko‘radi.

Abstraksiya

View murakkab join yoki filterga barqaror interface beradi. Application base table nomlari va ichki columnlardan kamroq bog‘liq bo‘ladi. Schema migration davrida compatibility view eski contractni vaqtincha saqlashi mumkin.

Abstraksiya performance xarajatini yashirishi ham mumkin. View ichida bir nechta join borligini bilmagan caller uni katta table bilan yana join qilib, qimmat plan yaratadi. EXPLAIN expanded queryni ko‘rsatadi.

Xavfsizlik

View foydalanuvchiga table’ning faqat kerakli ustun va satrlarini ko‘rsatishi mumkin. Base table permission berilmay, viewga SELECT huquqi beriladi. Security definer va invoker semantikasi databasega bog‘liq.

Predicate bypass bo‘lmasligi uchun row-level security va view barrier xususiyatlari tekshiriladi. User-defined function optimizer tomonidan filterdan oldin bajarilib, yashirin satr ma’lumotini side-channel orqali oshkor qilmasligi kerak.

System virtual table

Database katalog va runtime statistikani table ko‘rinishida beradi. Process list, lock, index usage va configuration virtual table orqali query qilinishi mumkin. Ayrim qiymatlar query boshida snapshot, boshqalari o‘qish davomida o‘zgaruvchi bo‘lishi mumkin.

System view’lar katta clusterda qimmat RPC yoki lock olishi mumkin. Monitoring juda tez intervalda og‘ir catalog query yuborsa o‘zi performancega ta’sir qiladi. Permissionlar query text va session ma’lumotini yashirishi mumkin.

External virtual table

Foreign table yoki extension remote database, CSV, object storage yoki API’ni SQL table sifatida ko‘rsatadi. Query planner filter va projectionni sourcega pushdown qilsa kam data ko‘chiriladi. Pushdown bo‘lmasa barcha satr local processga yuklanishi mumkin.

Remote source transaction va consistency semantikasi local database bilan bir xil bo‘lmasligi mumkin. Network timeout, partial result va credential lifecycle hisobga olinadi. Distributed join latency va data transfer narxini oshiradi.

Updatable virtual table

Oddiy bitta table view’i ayrim shartlarda insert, update va delete’ni base tablega tarjima qiladi. Join, aggregation yoki DISTINCT natijasida qaysi base row o‘zgarishi noaniq bo‘lsa view read-only bo‘ladi.

INSTEAD OF trigger murakkab view update’ini explicit mantiqqa aylantirishi mumkin. U transaction, validation va affected row semantikasini to‘g‘ri saqlashi kerak. View orqali constraintni chetlab o‘tib bo‘lmaydi.

Materialized view bilan bog‘lanish

Materialized view query natijasini fizik saqlaydi va refresh talab qiladi. Oddiy virtual view yangi data’ni darhol ko‘rsatadi, lekin har safar hisoblash xarajati bor. Tanlov freshness, query xarajati va refresh imkoniyatiga bog‘liq.

View dependency graph base column rename yoki drop paytida migrationga ta’sir qiladi. SELECT * bilan yaratilgan view yangi columnlarni avtomatik olish yoki eski column setini saqlash jihatidan enginega bog‘liq; explicit ro‘yxat barqarorroq contract beradi.

Bog‘liq tushunchalar

SQL view, Base table, Materialized view, Updatable view, Foreign table, Query optimizer, Row-level security