Metabase

مطالعه بیشتر

درک نحوه ارتباط جداول در یک پایگاه داده با یکدیگر.

رابطه‌های جدول پایگاه داده

درک نحوه ارتباط جداول در یک پایگاه داده با یکدیگر.

رابطه‌ها ارتباطات معنادار بین جداولی هستند که شامل اطلاعات مرتبط هستند — آن‌ها چیزی هستند که پایگاه‌های داده را مفید می‌کنند. بدون برخی اتصالات بین جداول در یک پایگاه داده، ممکن است به جای یک سیستم پایگاه داده با فایل‌های صفحه‌گسترده جداگانه کار کنید.

همانطور که در مرور کوتاه پایگاه‌های داده پوشش دادیم، پایگاه‌های داده مجموعه‌هایی از جداول هستند، و آن جداول فیلدهایی دارند (همچنین به عنوان ستون‌ها شناخته می‌شوند). هر جدول شامل یک فیلد به نام entity (یا primary) key است، که ردیف‌ها در آن جدول را شناسایی می‌کند. با گفتن به پایگاه داده که مقادیر کلید در یک جدول با مقادیر کلید در جدول دیگر مطابقت دارد، یک رابطه بین آن جداول ایجاد می‌کنید؛ این رابطه‌ها امکان اجرای پرس‌وجوهای قدرتمند در جداول مختلف در پایگاه داده شما را فراهم می‌کنند. وقتی entity key یک جدول به جدول دوم پیوند داده می‌شود، به عنوان یک کلید خارجی در آن جدول دوم شناخته می‌شود.

شناسایی اتصالاتی که بین جداول نیاز دارید بخشی از فرآیند مدل‌سازی داده و طراحی schema است — یعنی فرآیند فهمیدن اینکه داده شما چگونه با هم جور می‌شود، و دقیقاً چگونه باید جداول و فیلدهای آن‌ها را پیکربندی کنید. این فرآیند اغلب شامل ایجاد یک نمایش بصری از جداول و رابطه‌های آن‌ها است، که نمودار رابطه موجودیت (ERD) نامیده می‌شود، با نمادهای مختلف که انواع رابطه‌ها را مشخص می‌کنند. آن رابطه‌ها بین جداول شما می‌توانند:

فکر کردن درباره نحوه ارتباط جداول با یکدیگر همچنین به اطمینان از یکپارچگی داده، دقت داده، و نگه داشتن داده تکراری به حداقل کمک می‌کند.

رابطه یک به یک

در یک رابطه یک به یک، یک رکورد در یک جدول می‌تواند فقط با یک رکورد در جدول دیگر (یا در برخی موارد، هیچ رکوردی) مطابقت داشته باشد. رابطه‌های یک به یک رایج‌ترین نیستند، چون در بسیاری از موارد می‌توانید اطلاعات مربوط را در همان جدول ذخیره کنید. اینکه آیا آن اطلاعات را به چندین جدول تقسیم می‌کنید بستگی به مدل داده کلی و روشولوژی طراحی شما دارد؛ اگر جداول را تا حد امکان متمرکز نگه می‌دارید (مثل در یک پایگاه داده نرمال‌سازی شده)، ممکن است رابطه‌های یک به یک مفید پیدا کنید.

مثال رابطه یک به یک

فرض کنید اطلاعات کارمندان در شرکت خود را سازماندهی می‌کنید، و همچنین می‌خواهید رایانه هر کارمند را ردیابی کنید. از آنجایی که هر کارمند فقط یک رایانه دریافت می‌کند و آن رایانه‌ها بین کارمندان به اشتراک گذاشته نمی‌شوند، می‌توانستید فیلدهایی به جدول Employee خود اضافه کنید که اطلاعاتی مثل برند، سال، و سیستم عامل هر رایانه را نگه می‌دارند. با این حال، این می‌تواند از نظر معنایی شلوغ شود — آیا اطلاعات رایانه واقعاً متعلق به یک جدول درباره کارمندان است؟ این برای شما است که تصمیم بگیرید، اما گزینه دیگر ایجاد یک جدول Computers با یک رابطه یک به یک با جدول Employee است، مثل در نمودار زیر:

A one-to-one relationship between an Employee and a Computers table. PK indicates a primary key, and FK indicates a foreign key.

در این مورد، entity key از جدول Employee ما به عنوان کلید خارجی برای جدول Computers عمل می‌کند. ممکن است رایانه‌هایی داشته باشید که هنوز به کارمندان اختصاص داده نشده‌اند، و این مدل‌سازی اطمینان می‌دهد که هنوز می‌توانید رکوردهایی برای آن‌ها در جدول Computer نگه دارید. و اگر یک کارمند شرکت را ترک کند، فقط نیاز به به‌روزرسانی یک فیلد دارید، و می‌توانید به راحتی یک رایانه را به یک کارمند جدید پیوند دهید.

فرمت دقیق خطوط استفاده شده برای اتصال جداول در یک ERD (که crow's foot notation نامیده می‌شود) متفاوت است؛ گاهی اوقات خطوط ساده نشان‌دهنده یک رابطه یک به یک خواهید دید، گاهی اوقات آن خطوط crosshatch خواهند داشت.

رابطه‌های یک به یک همچنین می‌توانند برای اهداف امنیتی مفید باشند، مثل اگر می‌خواهید اطلاعات حساس مشتری را در یک جدول جداگانه ذخیره کنید، که آن را به جدول اصلی Customers خود با یک کلید خارجی پیوند می‌دهید.

رابطه یک به چند

رابطه‌های یک به چند رایج‌ترین نوع رابطه بین جداول در یک پایگاه داده هستند. در یک رابطه یک به چند (گاهی اوقات many-to-one نامیده می‌شود)، یک رکورد در یک جدول با صفر، یک، یا چندین رکورد در جدول دیگر مطابقت دارد.

مثال رابطه یک به چند

به عنوان مثال، درباره جداول برای مشتریان و سفارش‌های آن‌ها فکر کنید، مثل در پایگاه داده نمونه متابیس، جایی که یک رکورد از جدول People می‌تواند به چندین رکورد در جدول Orders پیوند داده شود. در این مورد، یک مشتری می‌تواند چندین سفارش انجام دهد، و آن رکوردهای چندگانه سفارش همه به یک رکورد واحد در جدول People پیوند داده می‌شوند. آن اتصال از طریق فیلد User_ID کدگذاری می‌شود، که یک کلید اصلی در جدول People و یک کلید خارجی در جدول Orders است. نمودار زیر نشان می‌دهد این دو جدول چگونه با یکدیگر مرتبط هستند:

A one-to-many relationship between the Sample Database

در حالی که یک نفر می‌تواند به چندین سفارش پیوند داده شود، برعکس درست نیست — سفارش‌ها فقط به یک رکورد واحد در جدول People پیوند داده می‌شوند، و مشتریان زیادی ندارند.

رابطه چند به چند

یک رابطه چند به چند نشان می‌دهد که چندین رکورد در یک جدول به چندین رکورد در جدول دیگر پیوند داده شده‌اند. آن رکوردها ممکن است فقط با یک رکورد واحد (یا هیچ) مرتبط باشند اما کلید این است که می‌توانند و اغلب به بیش از یکی پیوند داده شوند. رابطه‌های چند به چند در موارد استفاده عملی پایگاه داده خیلی رایج نیستند، چون پایبندی به نرمال‌سازی اغلب شامل تقسیم رابطه‌های چند به چند به جداول جداگانه و متمرکزتر است.

در واقع، سیستم پایگاه داده شما ممکن است حتی اجازه ایجاد یک رابطه چند به چند مستقیم را ندهد، اما می‌توانید با ایجاد یک جدول سوم، که join table نامیده می‌شود، و ایجاد رابطه‌های یک به چند بین آن و دو جدول شروع خود از این دور بزنید.

در این معنا، جدول Orders در پایگاه داده نمونه متابیس به عنوان یک join table عمل می‌کند، که یک پیوند میانی بین People و Products ایجاد می‌کند. یک ERD از پایگاه داده نمونه چیزی شبیه تصویر زیر به نظر می‌رسد، جایی که هر رابطه توسط نوع خط استفاده شده برای اتصال جداول مشخص می‌شود:

An ERD showing Metabase

از نظر فنی جدول‌های Products و Orders یک رابطه یک به چند دارند، به این معنا که یک محصول می‌تواند با چندین سفارش مرتبط باشد. اما طبق پایگاه داده شرکت جعلی ما، به نظر می‌رسد مشتریان فقط یک محصول واحد سفارش می‌دهند (آن‌ها مثل پنج Lightweight Wool Computer به هر دلیلی می‌خرند). یک پیاده‌سازی دنیای واقعی (و شاید با درک کسب‌وکار بیشتر) از این پایگاه داده احتمالاً شامل یک join table بین این دو خواهد بود، که باعث می‌شود سفارش‌ها بتوانند شامل محصولات مختلف زیادی باشند.

مطالعه بیشتر