Farzad Afi Logo

FarzadAfi

آموزش تخصصی برنامه نویسی

PostgreSQL second section | پستگرس قسمت دوم

📖توضیحات درس

🎥 این ویدیو قسمت پانزدهم از بوت‌کمپ رایگان جاوا است. 🐘 آموزش پستگرس و دیتابیس – قسمت دوم 📝 در این جلسه با مفاهیم پیشرفته‌تر PostgreSQL آشنا می‌شویم. از روابط مختلف بین جداول (One-to-One, One-to-Many, Many-to-Many) گرفته تا استفاده از داده‌های سریالی، توابع تجمعی (Aggregation Functions)، و نحوه انجام JOINهای مختلف مانند INNER JOIN و LEFT JOIN. همچنین، با مفاهیمی مثل Alias، GROUP BY، HAVING و Subqueries آشنا می‌شویم. این آموزش‌ها به شما کمک می‌کنه تا از توانمندی‌های کامل PostgreSQL برای پردازش داده‌ها استفاده کنید و به‌طور مؤثر با دیتابیس‌های پیچیده‌تر کار کنید. 👥 گروه پرسش و پاسخ تلگرام: programmingByFarzadAfi@ 💬 گروه پرسش و پاسخ بله: @programming_by_farzadafi ❓ هر سوالی داشتید، می‌توانید در این گروه بپرسید تا من یا مربی‌های حاضر راهنمایی‌تان کنیم. 🎓 بوت‌کمپ رایگان جاوا – آموزش تمرین‌محور برای یادگیری عمیق و ورود به بازار کار.
02:13:49🎯رایگان

📄جزوه

مفاهیم کلیدی

  • One-to-One Relationship  

رابطه‌ای که در آن هر رکورد از جدول اول تنها به یک رکورد از جدول دوم مرتبط است و برعکس؛ مانند رابطه هر فرد با پاسپورتش. برای پیاده‌سازی، Foreign Key باید Unique تعریف شود.

  • One-to-Many Relationship  

رابطه‌ای که در آن یک رکورد در جدول اول می‌تواند به چندین رکورد در جدول دوم وصل شود، اما هر رکورد در جدول دوم فقط به یک رکورد در جدول اول تعلق دارد؛ مانند رابطه یک برند گوشی با مدل‌های مختلف آن.

  • Many-to-Many Relationship  

رابطه‌ای که در آن چندین رکورد از جدول اول با چندین رکورد از جدول دوم در ارتباط هستند. این رابطه مستقیماً بین دو جدول برقرار نمی‌شود و نیاز به یک جدول میانی (Junction Table) دارد.

  • Primary Key  

یک کلید منحصربه‌فرد که به هیچ وجه نمی‌تواند null باشد و برای شناسایی یکتای هر ردیف در جدول استفاده می‌شود.

  • Foreign Key  

ستونی که به Primary Key یک جدول دیگر ارجاع می‌دهد (Reference) تا بین دو جدول ارتباط منطقی برقرار کند.

  • Serial  

یک نوع داده خاص در PostgreSQL که به طور خودکار مقادیر عددی یکتا تولید کرده و با هر درج (Insert) جدید، یکی به مقدار قبلی اضافه می‌کند (Auto-increment).

  • Inner Join  

روشی برای ترکیب جداول که تنها رکوردهایی را برمی‌گرداند که در هر دو جدول بر اساس شرط تعیین شده، اشتراک داشته باشند.

  • Left Join  

تمام رکوردهای جدول سمت چپ (Left) را برمی‌گرداند و رکوردهای متناظر از جدول سمت راست را در کنار آن‌ها قرار می‌دهد. اگر در جدول سمت راست مقداری یافت نشود، null نمایش داده می‌شود.

  • Aggregate Functions  

توابعی مانند SUM (مجموع)، COUNT (تعداد)، AVG (میانگین)، MIN و MAX که روی مجموعه‌ای از داده‌ها عملیات محاسباتی انجام داده و یک نتیجه واحد تولید می‌کنند.

  • Subquery  

یک کوئری داخلی (Nested Query) که نتیجه آن به عنوان ورودی یا شرط برای کوئری اصلی (Outer Query) استفاده می‌شود.

نکات مهم مصاحبه‌ای

  • چرا در رابطه یک‌به‌یک از قید Unique روی کلید خارجی استفاده می‌کنیم؟  

برای اینکه تضمین کنیم هر رکورد از جدول دوم نمی‌تواند به بیش از یک رکورد از جدول اول متصل شود و ساختار یک‌به‌یک حفظ گردد.

  • تفاوت اصلی WHERE و HAVING در چیست؟  

WHERE برای فیلتر کردن ردیف‌ها قبل از گروه‌بندی استفاده می‌شود، اما HAVING برای فیلتر کردن گروه‌های ایجاد شده توسط GROUP BY به کار می‌رود.

  • جدول میانی (Intermediate/Junction Table) چیست و چه زمانی استفاده می‌شود؟  

در روابط چند‌به‌چند (Many-to-Many)، چون نمی‌توان مستقیماً ارتباط را برقرار کرد، جدولی شامل دو Foreign Key می‌سازیم که به هر دو جدول اصلی اشاره می‌کنند.

  • دلیل استفاده از Alias (نام مستعار) در SQL چیست؟  

برای کوتاه‌تر کردن کدهای طولانی، افزایش خوانایی (به ویژه هنگام تکرار نام جداول در Join) و تغییر نام ستون‌های خروجی برای نمایش بهتر به کاربر.

  • اگر بخواهیم رکوردی را حذف کنیم که در جدول دیگری به آن ارجاع شده است، چه اتفاقی می‌افتد؟  

دیتابیس اجازه حذف نمی‌دهد (Error) تا یکپارچگی داده‌ها حفظ شود؛ مگر اینکه از دستوراتی مثل ON DELETE CASCADE استفاده شده باشد.

مثال یا سناریوی کاربردی

سناریو: مدیریت گوشی‌ها و لوازم جانبی (یک‌به‌چند)

فرض کنید یک جدول گوشی (phone) و یک جدول لوازم جانبی (accessory) داریم. هر گوشی می‌تواند چندین لوازم جانبی داشته باشد.

  1. ایجاد جدول اصلی:

CREATE TABLE phone (

    id SERIAL PRIMARY KEY,

    name VARCHAR(255)

);

  1. ایجاد جدول وابسته با کلید خارجی:

CREATE TABLE accessory (

    id SERIAL PRIMARY KEY,

    name VARCHAR(255),

    phone_id INTEGER REFERENCES phone(id) -- ایجاد رابطه

);

  1. واکشی داده‌ها با Join:

برای دیدن نام گوشی در کنار لوازم جانبی‌اش:


SELECT phone.name, accessory.name 

FROM phone 

JOIN accessory ON phone.id = accessory.phone_id;

بیشتر بدانید

  • SQL Convention: 

همیشه کلمات کلیدی SQL مانند SELECT ،FROM و WHERE را با حروف بزرگ (Uppercase) بنویسید تا از نام جداول و ستون‌ها متمایز شوند.

  • Alias Tip:

 با استفاده از کلمه AS می‌توانید نام‌های طولانی جداول را خلاصه کنید (مثلاً person AS p). استفاده از AS اختیاری است.

  • Indentation:

برای خوانایی بهتر کد، دستوراتی مثل JOIN ،ON یا WHERE را در خطوط جدید بنویسید و از تورفتگی (Indent) استفاده کنید تا از اسکرول افقی جلوگیری شود.

  • ترتیب اجرای Subquery: 

در کوئری‌های تو‌در‌تو، همیشه ابتدا کوئری داخلی اجرا شده و نتیجه آن در اختیار کوئری بیرونی قرار می‌گیرد.

  • نکته ابزار PGAdmin:

 در بخش UI این ابزار، می‌توانید مستقیماً داده‌ها را ویرایش کرده و ذخیره کنید، اما در پس‌زمینه خود ابزار کوئری‌های UPDATE را برای شما اجرا می‌کند.