ایجاد ارتباط بین جداول مختلف
اگر در دو جدول (Table) موجود در دیتابیس SQL Server قصد ایجاد ارتباط بین دادههای دو ستون بنماییم؛ مثلاً اگر در جدول اول نام و نام خانوادگی ما موجود باشد و در جدول دوم نام و نام خانوادگی به همراه شماره تلفن ما موجود باشد، میتوانیم امکانی ایجاد نماییم که در جدول اول شماره تماس ما از جدول دوم مقابل نام و نام خانوادگی متناسب قرار بگیرد. در این درس بصورت عملی نحوه ایجاد این نوع ارتباط را شرح دادهایم.
فهرست مطالب آموزش
ایجاد رابطه بین دو جدول در Microsoft SQL Server Management Studio
اکنون دو جدول در پایگاه داده داریم، جدول people و جدول orders.
من میخواهم یک رابطهای بین این دو جدول ایجاد کنم.
SQL SERVER یک پایگاه داده رابطهای است، به این معنی که روابط بین این جداول را پشتیبانی میکند. ما میخواهیم یک رابطه را طوری ایجاد کنیم که فیلد personIDدر جدولorder همیشه با مقدار معتبر از جدولpeople ادغام شود.
ایجاد کلید در جداول پایگاه داده اس کیو ال
به منظور اینکار، در ابتدا باید فیلد people ID را ایجاد کنیم، در واقع باید یک کلید داخل جدول people بسازیم.
من با استفاده از این علامت + جدول people را باز میکنم و به ستونها نگاهی میاندازم.
ما personid را داریم و آن چیزی است که ما میخواهیم به عنوان کلید قرار بدهیم، یعنی چیزی که مشخصه هر سطر از جدولorder باشد.
بنابراین روی جدول people کلیک راست میکنم و روی گزینه design میروم.
روی ستونpersonid کلیک میکنم تا دور آن هایلایت شود و در Management Studio روی toolbar پایینی، دومین آیکن از سمت چپ، یک آیکنی درست شبیه کلید وجود دارد که اگر روی آن کلیک کنیم، این ستون را برای جدول ما به عنوان کلید قرار میدهد.
این ستون با یک آیکون کلید کوچک کنار نام آن علامت گذاری میشود.
من آنرا میبندم و روی دکمه yes برای ذخیره کلیک میکنم.
ایجاد ارتباط بین دو جدول در پایگاه داده SQL Server
حالا جدولorder را باز میکنم.
یک نگاه به ستونها میاندازم.
PersonID، چیزی است که ما با آن میخواهیم ارتباط ایجاد کنیم؛ یعنی چیزی که مشخصه هر سطر از جدولorder باشد.
ما بخش کلیدها را باز میکنیم، آنرا خالی میبینیم و بنابراین روی آن کلیک راست میکنیم وNew Foreign Key را انتخاب میکنیم.
صفحهای برای ما باز میکند.
در بخش اصلی تعدادی بخش مختلف وجود دارد. با کمال تعجب، ما باید با متداولترین که به صورت پیشفرض در این بخش فعلاً قابل مشاهده نیست و بصورت بسته شده قرار دارد، کار کنیم. پس اجازه بدهید جلوتر برویم و این محدودیت را رفع کنیم. بنابراین باید آنرا باز کنیم. این بخش که گفتیم خیلی متداول است، درtable and columns specification وجود دارد.
ما باید روی مثلث سمت چپ آن کلیک کنیم و مثلث در ابتدا به سمت راست اشاره دارد.
اگر روی آن کلیک کنیم، مثلث به سمت پایین اشاره میکند و برای ما بخشی را برای ویرایش باز میکند.
برای انجام ویرایش باید روی دکمه سه نقطه کلیک کنیم.
بعد از اینکه روی آن کلیک کردیم، کادر جدیدی را برای ما باز میکند که ما میتوانیم نام ارتباط خود را به آن بدهیم.
به صورت پیشفرض یک نام برای آن انتخاب شده که خوب هم است.
جدولی که میخواهم برای primary keyانتخاب کنم، peopleاست و ستونی که میخواهم، ستونPersonID است که در جدولorders تبدیل به یک کلید خارجی یا همان foreign keyمیشود و همچنین ستون PersonID.
بنابراین یک ارتباط بین جدولpeople و جدول order به وجود آوردیم.
روی دکمه اوکی کلیک میکنم و صفحه را میبندم.
به پسزمینه دقت کنید، آن محیط designer را برای جدولorder بالا میآورد.
من میخواهم آنرا ببندم.
از من میپرسد که آیا میخواهم تغییرات ایجاد شده را ذخیره کنم یا نه.
روی دکمه yes کلیک میکنم.
سپس کادر دیگری باز میشود که به من میگوید هر دو جدول people و orders تحت تأثیر قرار میگیرند، آیا میخواهید ادامه بدهید؟ که خیلی تعجب آور هم نیست.
من پیش میروم و روی گزینه yes کلیک میکنم.
گرفتن خروجی از رابطه ببین دو جدول دیتابیس اس کیو ال سرور
و حالا روی keys کلیک راست میکنم و رفرش را میزنم.
حالا اگر لیست keys را باز کنم؛ آنجا ارتباط جدیدی را که ساختم، میبینم.
حالا اجازه بدهید که این رابطه را به اجرا بگذاریم و با هم ببینیم چه استفادههایی میشود از آن کرد.
من روی جدول order کلیک راست میکنم و روی گزینه Edit Top 200 Rows کلیک میکنم و میخواهم یک رکورد اینجا ایجاد کنم. برای orderid نباید چیزی تایپ کنم، چون آن یک ستون identity است. بنابراین به صورت اتوماتیک پر میشود.
برای personid اجازه بدهید مقدار یک برای آن بگذارم.
order amount مقدار 100$ و برای shipping address هم یک آدرس حمل و نقل میگذارم.
رکورد پذیرفته شد و مشکلی ندارد.
اگر من سعی کنم که برای personid مقداری بگذارم که وجود ندارد، برای مثال، یک مقدار مثل 99؛ مقدار ستونهای دیگر را هم همان مقدارهایی را بگذارم که در سطر قبلی گذاشتم.
زمانی که ما رکورد را سیو میکنیم یک ارور را به ما نشان میدهد. آن میگوید که داده نباید پذیرفته شود، چون این بیانیه متضاد آن چیزی است که در foreign keyاست و کاملاً درست میگوید. در واقع این محدودیت من را مجبور میکند که تنها مقدارهایی را برای personid قرار بدهم که در جدول people برای این ستون وجود دارد و 99 چون در جدول people نیست، در اینجا هم برای personid معتبر نخواهد بود.
روی دکمه اوکی کلیک میکنم وpersonid را به مقدار معتبر برای رکورد تغییر میدهم و حالا آن باید ذخیره شود.
صفحه رابط را میبندم.
دوباره روی orders کلیک راست میکنم.
و Top 1000 Rows را انتخاب میکنم.
در اینجا، داده با اصلاح مشکل که همان اصلاح داده نامعتبر برای personid بود، پذیرفته شده.