|
|
1 month ago | |
|---|---|---|
| .. | ||
| README.md | 1 month ago | |
| assignment.md | 1 month ago | |
README.md
کار با دادهها: پایگاههای داده رابطهای
![]() |
|---|
| کار با دادهها: پایگاههای داده رابطهای - یادداشت تصویری توسط @nitya |
احتمالاً قبلاً از یک صفحه گسترده برای ذخیره اطلاعات استفاده کردهاید. شما مجموعهای از ردیفها و ستونها داشتید، جایی که ردیفها شامل اطلاعات (یا دادهها) بودند و ستونها اطلاعات را توصیف میکردند (گاهی اوقات به آن متادیتا گفته میشود). یک پایگاه داده رابطهای بر اساس این اصل اصلی ستونها و ردیفها در جداول ساخته شده است، که به شما امکان میدهد اطلاعات را در چندین جدول پخش کنید. این به شما اجازه میدهد با دادههای پیچیدهتر کار کنید، از تکرار جلوگیری کنید و انعطافپذیری در نحوه کاوش دادهها داشته باشید. بیایید مفاهیم پایگاه داده رابطهای را بررسی کنیم.
آزمون پیشدرس
همه چیز با جداول شروع میشود
یک پایگاه داده رابطهای در هسته خود جداول دارد. درست مانند صفحه گسترده، یک جدول مجموعهای از ستونها و ردیفها است. ردیف شامل دادهها یا اطلاعاتی است که میخواهیم با آن کار کنیم، مانند نام یک شهر یا میزان بارش. ستونها دادههایی را که ذخیره میکنند توصیف میکنند.
بیایید کاوش خود را با شروع یک جدول برای ذخیره اطلاعات درباره شهرها آغاز کنیم. ممکن است با نام و کشور آنها شروع کنیم. میتوانید این را در یک جدول به صورت زیر ذخیره کنید:
| شهر | کشور |
|---|---|
| توکیو | ژاپن |
| آتلانتا | ایالات متحده |
| آوکلند | نیوزیلند |
توجه کنید که نام ستونهای شهر، کشور و جمعیت دادههای ذخیره شده را توصیف میکنند و هر ردیف اطلاعات مربوط به یک شهر را دارد.
کاستیهای رویکرد جدول واحد
احتمالاً جدول بالا برای شما نسبتاً آشنا به نظر میرسد. بیایید دادههای اضافی به پایگاه داده در حال رشد خود اضافه کنیم - بارش سالانه (بر حسب میلیمتر). ما روی سالهای ۲۰۱۸، ۲۰۱۹ و ۲۰۲۰ تمرکز خواهیم کرد. اگر بخواهیم آن را برای توکیو اضافه کنیم، ممکن است چیزی شبیه به این باشد:
| شهر | کشور | سال | مقدار |
|---|---|---|---|
| توکیو | ژاپن | ۲۰۲۰ | ۱۶۹۰ |
| توکیو | ژاپن | ۲۰۱۹ | ۱۸۷۴ |
| توکیو | ژاپن | ۲۰۱۸ | ۱۴۴۵ |
چه چیزی در مورد جدول ما متوجه میشوید؟ ممکن است متوجه شوید که نام و کشور شهر را بارها و بارها تکرار میکنیم. این میتواند فضای ذخیرهسازی زیادی را اشغال کند و عمدتاً نیازی به داشتن چندین نسخه از آن نیست. به هر حال، توکیو فقط یک نام دارد که ما به آن علاقهمندیم.
خوب، بیایید چیز دیگری را امتحان کنیم. بیایید ستونهای جدیدی برای هر سال اضافه کنیم:
| شهر | کشور | ۲۰۱۸ | ۲۰۱۹ | ۲۰۲۰ |
|---|---|---|---|---|
| توکیو | ژاپن | ۱۴۴۵ | ۱۸۷۴ | ۱۶۹۰ |
| آتلانتا | ایالات متحده | ۱۷۷۹ | ۱۱۱۱ | ۱۶۸۳ |
| آوکلند | نیوزیلند | ۱۳۸۶ | ۹۴۲ | ۱۱۷۶ |
در حالی که این از تکرار ردیف جلوگیری میکند، چند چالش دیگر ایجاد میکند. هر بار که سال جدیدی اضافه شود، باید ساختار جدول خود را تغییر دهیم. علاوه بر این، با رشد دادهها، داشتن سالها به عنوان ستونها بازیابی و محاسبه مقادیر را دشوارتر میکند.
به همین دلیل است که به چندین جدول و روابط نیاز داریم. با تقسیم دادهها میتوانیم از تکرار جلوگیری کنیم و انعطافپذیری بیشتری در نحوه کار با دادهها داشته باشیم.
مفاهیم روابط
بیایید به دادههای خود بازگردیم و تعیین کنیم چگونه میخواهیم آنها را تقسیم کنیم. میدانیم که میخواهیم نام و کشور شهرها را ذخیره کنیم، بنابراین احتمالاً این بهترین کار در یک جدول است.
| شهر | کشور |
|---|---|
| توکیو | ژاپن |
| آتلانتا | ایالات متحده |
| آوکلند | نیوزیلند |
اما قبل از ایجاد جدول بعدی، باید بفهمیم چگونه به هر شهر ارجاع دهیم. ما به نوعی شناسه، ID یا (در اصطلاحات فنی پایگاه داده) کلید اصلی نیاز داریم. کلید اصلی مقداری است که برای شناسایی یک ردیف خاص در یک جدول استفاده میشود. در حالی که میتواند بر اساس یک مقدار باشد (مثلاً میتوانیم از نام شهر استفاده کنیم)، تقریباً همیشه باید یک عدد یا شناسه دیگری باشد. نمیخواهیم شناسه هرگز تغییر کند زیرا این رابطه را خراب میکند. در اکثر موارد کلید اصلی یا شناسه یک عدد خودکار تولید شده خواهد بود.
✅ کلید اصلی اغلب به صورت PK مخفف میشود
شهرها
| city_id | شهر | کشور |
|---|---|---|
| ۱ | توکیو | ژاپن |
| ۲ | آتلانتا | ایالات متحده |
| ۳ | آوکلند | نیوزیلند |
✅ متوجه خواهید شد که در طول این درس از اصطلاحات "id" و "کلید اصلی" به صورت متناوب استفاده میکنیم. مفاهیم اینجا برای DataFrameها نیز صدق میکند که بعداً بررسی خواهید کرد. DataFrameها از اصطلاح "کلید اصلی" استفاده نمیکنند، اما رفتار آنها بسیار مشابه است.
با ایجاد جدول شهرها، بیایید بارش را ذخیره کنیم. به جای تکرار اطلاعات کامل درباره شهر، میتوانیم از شناسه استفاده کنیم. همچنین باید اطمینان حاصل کنیم که جدول تازه ایجاد شده یک ستون id نیز دارد، زیرا همه جداول باید یک شناسه یا کلید اصلی داشته باشند.
بارش
| rainfall_id | city_id | سال | مقدار |
|---|---|---|---|
| ۱ | ۱ | ۲۰۱۸ | ۱۴۴۵ |
| ۲ | ۱ | ۲۰۱۹ | ۱۸۷۴ |
| ۳ | ۱ | ۲۰۲۰ | ۱۶۹۰ |
| ۴ | ۲ | ۲۰۱۸ | ۱۷۷۹ |
| ۵ | ۲ | ۲۰۱۹ | ۱۱۱۱ |
| ۶ | ۲ | ۲۰۲۰ | ۱۶۸۳ |
| ۷ | ۳ | ۲۰۱۸ | ۱۳۸۶ |
| ۸ | ۳ | ۲۰۱۹ | ۹۴۲ |
| ۹ | ۳ | ۲۰۲۰ | ۱۱۷۶ |
توجه کنید ستون city_id در جدول تازه ایجاد شده rainfall. این ستون شامل مقادیری است که به شناسههای جدول cities ارجاع میدهند. در اصطلاحات فنی دادههای رابطهای، این یک کلید خارجی نامیده میشود؛ این یک کلید اصلی از جدول دیگر است. میتوانید آن را به عنوان یک ارجاع یا اشارهگر در نظر بگیرید. city_id ۱ به توکیو اشاره دارد.
[!NOTE]
کلید خارجی اغلب به صورت FK مخفف میشود
بازیابی دادهها
با جدا شدن دادهها در دو جدول، ممکن است بپرسید چگونه آنها را بازیابی کنیم. اگر از پایگاه داده رابطهای مانند MySQL، SQL Server یا Oracle استفاده میکنیم، میتوانیم از زبانی به نام زبان پرسوجوی ساختاریافته یا SQL استفاده کنیم. SQL (که گاهی اوقات به صورت sequel تلفظ میشود) زبان استانداردی است که برای بازیابی و تغییر دادهها در پایگاه داده رابطهای استفاده میشود.
برای بازیابی دادهها از دستور SELECT استفاده میکنید. در اصل، شما ستونهایی را که میخواهید ببینید انتخاب میکنید از جدولی که آنها در آن قرار دارند. اگر بخواهید فقط نام شهرها را نمایش دهید، میتوانید از دستور زیر استفاده کنید:
SELECT city
FROM cities;
-- Output:
-- Tokyo
-- Atlanta
-- Auckland
SELECT جایی است که ستونها را فهرست میکنید و FROM جایی است که جداول را فهرست میکنید.
[!NOTE]
نحو SQL به حروف بزرگ و کوچک حساس نیست، به این معنی کهselectوSELECTیکسان هستند. با این حال، بسته به نوع پایگاه دادهای که استفاده میکنید، ستونها و جداول ممکن است به حروف بزرگ و کوچک حساس باشند. بنابراین، بهترین روش این است که همیشه همه چیز را در برنامهنویسی به عنوان حساس به حروف بزرگ و کوچک در نظر بگیرید. هنگام نوشتن پرسوجوهای SQL، معمولاً کلیدواژهها را با حروف بزرگ مینویسند.
پرسوجوی بالا همه شهرها را نمایش میدهد. فرض کنیم فقط میخواهیم شهرهای نیوزیلند را نمایش دهیم. به نوعی فیلتر نیاز داریم. کلیدواژه SQL برای این کار WHERE است، یا "جایی که چیزی درست است".
SELECT city
FROM cities
WHERE country = 'New Zealand';
-- Output:
-- Auckland
پیوستن دادهها
تا کنون دادهها را از یک جدول بازیابی کردهایم. حالا میخواهیم دادهها را از هر دو جدول cities و rainfall با هم بیاوریم. این کار با پیوستن آنها به هم انجام میشود. شما در واقع یک اتصال بین دو جدول ایجاد میکنید و مقادیر یک ستون از هر جدول را با هم مطابقت میدهید.
در مثال ما، ستون city_id در جدول rainfall را با ستون city_id در جدول cities مطابقت میدهیم. این مقدار بارش را با شهر مربوطه آن مطابقت میدهد. نوع پیوستی که انجام میدهیم، پیوست داخلی نامیده میشود، به این معنی که اگر ردیفی با هیچ چیزی از جدول دیگر مطابقت نداشته باشد، نمایش داده نمیشود. در مورد ما هر شهری بارش دارد، بنابراین همه چیز نمایش داده میشود.
بیایید بارش سال ۲۰۱۹ را برای همه شهرها بازیابی کنیم.
این کار را مرحله به مرحله انجام میدهیم. اولین مرحله پیوستن دادهها با مشخص کردن ستونهای اتصال - city_id است که قبلاً برجسته شده بود.
SELECT cities.city
rainfall.amount
FROM cities
INNER JOIN rainfall ON cities.city_id = rainfall.city_id
ما دو ستون مورد نظر را برجسته کردهایم و اینکه میخواهیم جداول را بر اساس city_id به هم متصل کنیم. حالا میتوانیم عبارت WHERE را اضافه کنیم تا فقط سال ۲۰۱۹ را فیلتر کنیم.
SELECT cities.city
rainfall.amount
FROM cities
INNER JOIN rainfall ON cities.city_id = rainfall.city_id
WHERE rainfall.year = 2019
-- Output
-- city | amount
-- -------- | ------
-- Tokyo | 1874
-- Atlanta | 1111
-- Auckland | 942
خلاصه
پایگاههای داده رابطهای حول تقسیم اطلاعات بین چندین جدول متمرکز هستند که سپس برای نمایش و تحلیل دوباره به هم متصل میشوند. این انعطافپذیری بالایی برای انجام محاسبات و دستکاری دادهها فراهم میکند. شما مفاهیم اصلی پایگاه داده رابطهای و نحوه انجام پیوست بین دو جدول را دیدهاید.
🚀 چالش
پایگاههای داده رابطهای متعددی در اینترنت موجود است. میتوانید با استفاده از مهارتهایی که در بالا آموختهاید، دادهها را کاوش کنید.
آزمون پس از درس
آزمون پس از درس
مرور و مطالعه خودآموز
چندین منبع در Microsoft Learn برای ادامه کاوش شما در مفاهیم SQL و پایگاه داده رابطهای موجود است
- توصیف مفاهیم دادههای رابطهای
- شروع کار با پرسوجو با Transact-SQL (Transact-SQL نسخهای از SQL است)
- محتوای SQL در Microsoft Learn
تمرین
سلب مسئولیت:
این سند با استفاده از سرویس ترجمه هوش مصنوعی Co-op Translator ترجمه شده است. در حالی که ما در تلاش برای دقت هستیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است حاوی خطاها یا نواقصی باشند. سند اصلی به زبان بومی خود باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفهای انسانی توصیه میشود. ما مسئول هیچ گونه سوءتفاهم یا تفسیر نادرستی که از استفاده این ترجمه ناشی شود، نیستیم.
