Skip to main content

آشنایی با ارتباطات primary keys و foreign keys مابین ستونهای جداول والد و فرزند

Understanding primary and foreign keys

در این درس از دوره Microsoft Access Essential Training، به بررسی تخصصی مفاهیم کلیدی Primary Key و Foreign Key پرداخته می‌شود؛ جایی که با ارائه مثال‌های کاربردی، اهمیت انتخاب صحیح یک Primary Key به عنوان شناسه یکتا برای رکوردها و استفاده بهینه از Foreign Key در ایجاد ارتباط‌های یک به چند بین جداول، جهت تضمین یکپارچگی داده‌ها و بهبود کارایی سیستم‌های اطلاعاتی، به تفصیل شرح داده شده است. این آموزش جامع و تخصصی که مختص متخصصان بازار کار و کارشناسان رشته‌های تخصصی طراحی شده، به شما کمک می‌کند تا با تکیه بر اصول طراحی پایگاه داده‌های رابطه‌ای و راهکارهای عملی، دانش خود را به سطح بالاتری برسانید و پس از مشاهده ویدیو آموزشی منتشر شده در YouTube، بتوانید این مفاهیم را در پروژه‌های واقعی به کار ببرید.

لینک کمکی (official link): آموزش جامع Primary & Foreign Key در Microsoft Access | طراحی پایگاه داده حرفه‌ای

در یک پایگاه داده خوب طراحی شده میشه رکوردهای جدولی رو به رکوردهای جدولی دیگه مرتبط کرد. اگه داده ای داریم که مناسب جدول اول نیست و با موضوعش همخوانی نداره؛ بهتره اون داده وارد جدول دیگه ای بشه. مثلاً فرض کنین میخایم اطلاعات کارت اعتباری رو به پایگاه داده بصورت مرتب اضافه کنیم. قبل از وارد کردن اطلاعات کارت اعتباری مهمون ها با همون متد قبلی یعنی با استفاده از guest ID هاشون در یک فیلد جدید از همون جدول سابق guests،  و بالطبع بعدشم ذخیره سازیشون در همون جدول؛ بهتره بیاید و چند تا سوال رو از خودتون بپرسید: آیا شماره کارت های اعتباری معرف دیتیل مهمان ها هست که من بخام بیام و شماره کارت هاشون رو در جدول guests ای که صرفاً برای معرفی کاربران تنظیمش کرده بودم، وارد کنم؟

خب؛ راستش نه؛ این شماره کارت اعتباری برای بهره برداری های اقتصادی و مناسب جدول guests ای که معرف مهمان های هتل هستش ،نیست. یک سوال دیگه: آیا هر مهمانی بعنوان دیتیل شخصیت­یش دوست داره ما بعنوان هتل­داره لندن، اطلاعات کارت اعتباریش رو هم براش در یکجا قرار بدیم؟ مسلماً اگر از مهمان ها بپرسید هیچ کدومشون نمیگن که یک همچین سناریویی رو میپسندن.  

یک سوال دیگه هم میشه مطرح کرد و اینکه: آیا مهمان هایی وجود دارند که چند تا کارت اعتباری با خودشون داشته باشن و بخان اطلاعات کارت های اعتباری مختلفشون رو ما در فایل هتلمون ثبت کنیم؟ ما که بیشتر از یک فیلد برای وارد کردن اطلاعات کارت اعتباریشون نداریم! پس چیکار باید بکنیم؟ خب؛ میشه بطور کلی گفت بله؛ همه این سناریوهای مطرح شده در قالب سوال؛ قابل وقوع­ هستند. و میشه با اطمینان اینو گفت که کارت اعتباری معرف خوبی برای مهمون ها نیست که خاسته باشیم سعی کنیم اطلاعت کارت هاشون رو در همون جدول guests سفارشی سازی کنیم. همونطور که گفتم بعضی مهمان­ها کارت اعتباری ندارن و بعضی ها چند تا کارت اعتباری دارند.

تمام این جواب ها باعث میشه نتیجه بگیریم که این اطلاعات مربوط به کارت های اعتباری مهمان ها، باید توی یک جدول دیگه ای بجز جدول guests نگهداری بشه. پس بذارین پیش بریم و یک جدول هم برای نگهداری اطلاعات کارت اعتباری درست کنیم. اول میریم این بالا روی تب Create درست در اینجا؛ و روی آیکن table از ریبون کلیک می کنیم.

اکسس یک جدول جدید در اختیارمون میذاره و همونطور که می بینید: ستون اول رو هم به فیلد ID اختصاص میده و قالبش هم بصورت دیفالت روی AutoNumber تنظیم هست.

برای دیدن قالبش اگه اینجا روش کلیک کنیم؛ می بینید که نوعه داده­اَش همونطور که در این لیست مشخص روی AutoNumber تنظیم شده. بجای همین اسم دیفالت و ساده ID ،اسمش رو میذاریم CreditCardID. برای اسمش می تونیم اسم دقیقاً چیزی که جدول قرار ذخیره کنه رو براش بنویسیم. فیلد بعدی، درست در اینجا، می تونه نام کارت اعتباری رو مشخص و تعریف کنه. پس اسم فیلد بعدی رو باید “نام کارت اعتباری” و یک همچین چیزی گذاشت. بکارم ادامه میدم و قبل از تایپ اسم فیلد؛ میام و قالبش رو هم روی Short Text قرار میدم بعد هم CardName رو براش تایپ می کنم.

تب رو میزنیم تا بره روی ستون یا فیلد بعدی، اسمش رو میخام بذارم card type. باز هم Short Text رو برای قالبش انتخاب میکنم؛ چون یک فیلد متنی هست.

باز هم تب رو میزنیم. خب؛ شماره card رو قرار توی این ستون بنویسیم؛ اما بجای قالب number باز هم Short Text رو انتخاب می کنیم مسلماً قرار نیست اعمال ریاضی روی شماره card های اعتباری پیاده کنیم. برای همین بهتر قالبش متنی باشه. بعد از این که قالبش رو روی Short Text انتخاب کردیم اسمش رو هم وارد می کنیم؛ اسمش رو میذارم CardNumber. یکبار دیگه دکمه تب رو میزنیم آخرین فیلد مربوط به تاریخ انقضای کارته.

پس قالب date and time یا همون تاریخ و زمان رو از اینجا براش در نظر می گیریم؛ پس از لیست اینجا انتخابش می کنم و بعد هم اسمش رو ExpirationDate میذاریم. برای رفتن به آخرین فیلد تب رو میزنیم؛ باید یادمون باشه یک راهی پیدا کنیم که بهمون بگه این card متعلق به کدوم مشتری و مهمان هست.

میشه اسمی که در فیلد “نام” برای مهمان در نظر گرفتیم، رو وارد کرد، اما اگه دو تا مهمون با یک اسم داشتیم چی؟ از کجا بفهمیم این کارت مربوط به کدومشون هست. برای همین هست که تو جدول از کلیدهای منحصر بفرد primary key استفاده میشه.

می تونیم أزشون در جدول دیگه استفاده بکنیم و اینطور دقیقاً میشه فهمید هر کارت اعتباری متعلق به کدوم مهمان هست. پس برای اینکه بفهمیم هر card مربوط به کی هست از این کلید ها استفاده می کنیم. توی این مورد در جدول مربوط به کارت های اعتباری  بهش می گیم foreign key.

با اینکار بهمون میگه هر card به اطلاعات کدوم میهمان متصل هست. در واقع به فیلدی که در جدول دیگه ای primary key  باشه foreign key میگین که عامل ارتباط دو جدول هست. بیاین یک foreign key به اسم Guest ID رو در اینجا درست کنیم. از اونجایی که میخایم به فیلد auto number ای از جدول guest مرتبطش کنیم پس نوعه داده اش باید روی Number باشه، درواقع باید نوع هر جفت شون یکی باشه.

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

حالا بر می گردیم اینجا روی ستون GuestID کلیک می کنیم تا منویی که ظاهر شده بود ناپدید بشه.

اگه بخایم ترتیب ستون ها رو عوض بکنیم تنها کاری که باید بکنیم این هست که کلیک کنیم و بعدش هم درگ کنیم. پس اینجایی که کلیک کرده بودم مجدد  کلیک می کنم و بعد هم GuestID رو درگش میکنم؛ میذارمش بعد از CreditCardID.

موقع ایجاد جدول؛ اولین ستون مربوط به primary key اون جدول میشه و معمولاً ستون دوم و سوم نشون دهنده foreign keys هایی هست که برای لینک به دیگر جداول أزشون قرار استفاده کنیم.

بالاجبار نیاز به یک هم­چین سفارشی سازی ای نیست. اما معمولاً در کار همه اپراتورهای اکسس به همین شکل هست. الان دیگه وقتش هست جدول رو ذخیره کنیم؛ پس روی آیکن save نوار ابزار quick access toolbar کلیک می کنیم. اسمش رو هم GuestCreditCards میذارم.

 حالا دیگه همونطور که مشخص هست GuestCreditCards به پانلnavigation  اضافه شده.

 الان باید یکسری اطلاعات بهش بدیم. بیاید قبل از این کار اطلاعات اون یکی جدول یعنی Guests رو ببینیم.روی جدول Guests دابل کلیک می کنیم.

 الان 3 تا مهمان وارد شده Katherine اولین مهمان هست؛ و GuestID اش یک هست. Donald مهمان شماره 2 هست؛ GuestID اش هم 2 هست.  Sarahهم مهمان شماره 3 و GuestID اش هم 3 هست.

بیاین اطلاعات چند تا از کارت های اعتباری Sarah ای که  GuestIDاش 3 هست رو وارد کنیم.

از اینجا با کلیک روی این یکی تب، برمی گردیم سراغ جدول GuestCreditCards. زیر GuestID بکارم ادامه میدم و شماره 3 رو وارد میکنیم.

 CardName  یا اسمش business هست. نوعش هم Visa کارت هست. بجای شماره در فیلد CardNumber هم چند تا صفر میذاریم. تاریخ انقضاء رو هم در فیلد expiration date هم 31 ه 10 ه 2018 وارد میکنیم. برای رفتن به ردیف رکورد بعدی برای وارد کردن اطلاعات کارت اعتباری دیگه سارا؛ اینتر رو میزنیم. بعد هم تب رو میزنیم چون توی فیلد ID در هر صورت نمیشه چیزی وارد کرد.

اطلاعات دومین کارت اعتباری سارا رو وارد می کنیم. برای مرتبط کردن این کارت ها به مهمان شماره 3 باز هم شماره 3 رو در GuestID وارد می کنیم.

تب رو میزنیم. این یک کارت شخصی هست یعنی personal debit هست؛ پس برای فیلد CardName تایپش می کنم. باز هم از نوع Visa هست. بجای شماره کارتش، باز هم چند تا صفر میذاریم. تاریخ انقضاش هم 31 ه 3 ه 2019 هست.

خب؛ همونطور که می بینیم ساختارش خیلی منعطف و کار آمده و اجازه میده، یک یا هر تعداد داده ای رو که از هر مشتری یا مهمان داریم رو واردشون کنیم. ترتیب نوشتن اطلاعات هر کارت هم توی این جدول فرقی نمیکنه. اشکالی نداره اطلاعات Katherine  یعنی مهمان با شماره آی دی 1 رو بعد یا قبل از مهمان با شماره آی دی 3 یعنی سارا رو وارد کنیم. تا زمانی که از آی دیش در فیلد GuestID استفاده می کنیم مهم نیست اطلاعاتش رو کجای جدول بنویسیم.

حالا اگه بخایم اطلاعات کارت Katherine رو وارد بکنیم شماره آیدیش یعنی 1 رو در فیلد GuestID تایپ میکنیم و به این شکل هم میایم و بقیه اطلاعات کارت اعتباریش رو هم وارد می کنیم. پس اضافه کردن foreign keys به جدول مثل اضافه کردن اطلاعات مربوط به بقیه یه فیلد هاست و اکسس اینبار اون رو اتوماتیک وارد نمیکنه. مهمترین نکته ای که باید یادتون باشه اینه که قالب داده هاش باید با مرجعی که قرار در جدول دیگه ای باهاش مقایسه بشه، یکی باشه. یعنی اگه توی یک جدول از AutoNumber بعنوان primary key  استفاده می کنیم foreign key جدول بعدی هم باید روی AutoNumber باشه. تا زمانی که داده ها یکی باشن از اطلاعات یک جدول میشه بعنوان مرجع جدول بعدی برای امر لوک آپ اطلاعات استفاده کرد. عجله نکنید و با من در طهاکو همراه بمونید تا بموقعش در این دوره آموزشی جامع؛ با مقوله لوک آپ در اکسس؛ آشناتون کنم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دوره ها
درس ها
Tha PMIS
طهاکو من
0