PostgreSQL second section | پستگرس قسمت دوم
📖توضیحات درس
📄جزوه
مفاهیم کلیدی
- 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) داریم. هر گوشی میتواند چندین لوازم جانبی داشته باشد.
- ایجاد جدول اصلی:
CREATE TABLE phone (
id SERIAL PRIMARY KEY,
name VARCHAR(255)
);
- ایجاد جدول وابسته با کلید خارجی:
CREATE TABLE accessory (
id SERIAL PRIMARY KEY,
name VARCHAR(255),
phone_id INTEGER REFERENCES phone(id) -- ایجاد رابطه
);
- واکشی دادهها با 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 را برای شما اجرا میکند.
