در دومین جلسه از دورهی پستگرس کاربردی، از سطح دستورات معمول SQL به لایههای عمیقتر PostgreSQL سفر کردیم – جایی که دادهها واقعاً زندگی میکنند.
در این جلسه، با مثالهای واقعی و تمرینهای عملی، دیدیم که دادهها چگونه تعریف، تولید، ذخیره و مدیریت میشوند، و چه ابزارهایی در اختیار ماست تا ساختار پایگاه دادهای حرفهای و قابل اعتماد طراحی کنیم.
در آغاز جلسه، PostgreSQL را در محیطی ایزوله با استفاده از Docker راهاندازی کردیم.
این روش ضمن سهولت در نصب و اجرا، امکان ایجاد محیطی استاندارد، تکرارپذیر و قابلحذف را برای تست و توسعه فراهم میکند – بدون آنکه اثری روی سیستم اصلی باقی بماند.
در این بخش به زبان SQL و دستهبندی آن پرداختیم (DDL, DML, DQL, DCL…)
و با دستورات DDL آشنا شدیم که ساختار پایگاه داده را تعریف میکنند:
ایجاد و حذف Database، Schema، Table، Sequence و بررسی ارتباط میان این اجزاء.
هدف، درک معماری منطقی PostgreSQL و نحوهی سازماندهی اشیای آن بود.
PostgreSQL از نظر تنوع در Data Typeها یکی از غنیترین سیستمهاست.
در این بخش با دادههای عددی، متنی، زمانی و همچنین ساختارهای پیشرفته آشنا شدیم:
همچنین دیدیم که دادههای بزرگ (Large Objects) – مانند متنها یا باینریها – در سیستم ذخیرهسازی جداگانهای به نام TOAST نگهداری میشوند.
در ادامه، بررسی کردیم که PostgreSQL فقط به دادههای از پیشتعریفشده محدود نیست.
میتوانیم نوع دادهی سفارشی خود را تعریف کنیم و حتی با کمک PL/pgSQL رفتار آن را مشخص کنیم – مثلاً نحوهی مقایسه یا تبدیل داده.
این قابلیت، PostgreSQL را به بستری توسعهپذیر برای تحلیل داده و طراحی سیستمهای خاص تبدیل میکند.
در این بخش یاد گرفتیم که برای ایجاد مقادیر افزایشی (Auto Increment) سه رویکرد وجود دارد:
| نوع | ویژگی | توضیح |
|---|---|---|
| Sequence | قابل کنترل و اشتراکی | شیء مستقل برای تولید دنبالهی عددی |
| Serial / BigSerial | غیر استاندارد اما رایج | میانبری برای ساخت ستون همراه با Sequence داخلی |
| Identity | استاندارد SQL | دارای دو حالت BY DEFAULT و ALWAYS برای کنترل نحوهی تولید مقدار |
درک تفاوت این سه روش برای طراحی کلیدهای اصلی و دادههای ترتیبی بسیار حیاتی است.
در این بخش با Constraints به عنوان ابزارهای حفظ یکپارچگی داده آشنا شدیم.
PostgreSQL با قیود زیر از ورود دادههای نادرست جلوگیری میکند:
PRIMARY KEY برای شناسهی یکتاFOREIGN KEY برای ارتباط بین جداولUNIQUE برای جلوگیری از تکرارCHECK برای اعتبارسنجی شرطیNOT NULL برای اجباری بودن مقدارConstraints باعث میشوند قواعد کسبوکار در خود دیتابیس پیادهسازی شوند، نه فقط در لایهی نرمافزار — که منجر به دادههای قابل اعتمادتر و کدهای سادهتر میشود.
در این قسمت، وارد دنیای درونی PostgreSQL شدیم و با جداول سیستمی مانند:pg_class, pg_type, pg_attribute, pg_namespace
آشنا شدیم. این جداول همان متادیتای سیستم هستند و اطلاعات کاملی از ساختار دیتابیس در خود نگه میدارند.
در پایان، لایهی فیزیکی ذخیرهسازی داده را بررسی کردیم:
هر جدول از Pageهایی با اندازهی ۸KB تشکیل شده است.
با مفهوم CTID آشنا شدیم که مکان دقیق هر ردیف در فایل فیزیکی را مشخص میکند و نقش مهمی در عملکرد UPDATE، Vacuum و HOT Update دارد.
در این جلسه از سطح دستورات SQL فراتر رفتیم و درک کردیم که PostgreSQL چگونه دادهها را در سطوح منطقی و فیزیکی سازماندهی میکند.
درک این مفاهیم برای هر مهندس داده یا DBA حیاتی است – چون تنها با شناخت ساختار درونی است که میتوانیم پایگاه دادهای بهینه، قابلاطمینان و مقیاسپذیر طراحی کنیم.
🎥 فیلم این جلسه که به ساختار منطقی و فیزیکی پایگاه دادهها در PostgreSQL میپردازد، در ادامه قابل مشاهده است.