16 KiB
ڈیٹا کے ساتھ کام کرنا: ریلیشنل ڈیٹا بیسز
![]() |
|---|
| ڈیٹا کے ساتھ کام کرنا: ریلیشنل ڈیٹا بیسز - @nitya کی طرف سے اسکیچ نوٹ |
امکان ہے کہ آپ نے ماضی میں معلومات ذخیرہ کرنے کے لیے اسپریڈشیٹ استعمال کی ہو۔ آپ کے پاس قطاروں اور کالموں کا ایک سیٹ تھا، جہاں قطاروں میں معلومات (یا ڈیٹا) موجود تھیں، اور کالموں نے معلومات کی وضاحت کی (جسے کبھی کبھار میٹا ڈیٹا کہا جاتا ہے)۔ ریلیشنل ڈیٹا بیس اسی بنیادی اصول پر مبنی ہے، یعنی ٹیبلز میں کالمز اور قطاریں، جو آپ کو معلومات کو متعدد ٹیبلز میں تقسیم کرنے کی اجازت دیتا ہے۔ یہ آپ کو پیچیدہ ڈیٹا کے ساتھ کام کرنے، نقل سے بچنے، اور ڈیٹا کو دریافت کرنے کے طریقے میں لچک فراہم کرتا ہے۔ آئیے ریلیشنل ڈیٹا بیس کے تصورات کو دریافت کرتے ہیں۔
لیکچر سے پہلے کا کوئز
سب کچھ ٹیبلز سے شروع ہوتا ہے
ریلیشنل ڈیٹا بیس کی بنیاد ٹیبلز پر ہوتی ہے۔ بالکل اسپریڈشیٹ کی طرح، ایک ٹیبل کالمز اور قطاروں کا مجموعہ ہوتا ہے۔ قطار میں وہ ڈیٹا یا معلومات ہوتی ہیں جن کے ساتھ ہم کام کرنا چاہتے ہیں، جیسے کسی شہر کا نام یا بارش کی مقدار۔ کالمز اس ڈیٹا کی وضاحت کرتے ہیں جو وہ ذخیرہ کرتے ہیں۔
آئیے اپنی دریافت کا آغاز ایک ٹیبل بنا کر کرتے ہیں جو شہروں کے بارے میں معلومات ذخیرہ کرے۔ ہم ان کے نام اور ملک سے شروع کر سکتے ہیں۔ آپ اسے ایک ٹیبل میں اس طرح ذخیرہ کر سکتے ہیں:
| شہر | ملک |
|---|---|
| ٹوکیو | جاپان |
| اٹلانٹا | امریکہ |
| آکلینڈ | نیوزی لینڈ |
نوٹ کریں کہ شہر، ملک اور آبادی کے کالمز ذخیرہ کیے جانے والے ڈیٹا کی وضاحت کرتے ہیں، اور ہر قطار میں ایک شہر کے بارے میں معلومات موجود ہیں۔
ایک ٹیبل کے طریقے کی خامیاں
امکان ہے کہ اوپر دیا گیا ٹیبل آپ کو کافی مانوس لگے۔ آئیے اپنی بڑھتی ہوئی ڈیٹا بیس میں کچھ اضافی ڈیٹا شامل کرتے ہیں - سالانہ بارش (ملی میٹر میں)۔ ہم 2018، 2019 اور 2020 کے سالوں پر توجہ مرکوز کریں گے۔ اگر ہم اسے ٹوکیو کے لیے شامل کریں، تو یہ کچھ اس طرح نظر آئے گا:
| شہر | ملک | سال | مقدار |
|---|---|---|---|
| ٹوکیو | جاپان | 2020 | 1690 |
| ٹوکیو | جاپان | 2019 | 1874 |
| ٹوکیو | جاپان | 2018 | 1445 |
آپ ہمارے ٹیبل میں کیا دیکھتے ہیں؟ آپ دیکھ سکتے ہیں کہ ہم شہر کا نام اور ملک بار بار دہرا رہے ہیں۔ یہ کافی زیادہ اسٹوریج لے سکتا ہے، اور یہ غیر ضروری ہے کہ متعدد کاپیاں ہوں۔ آخر کار، ٹوکیو کا صرف ایک نام ہے جس میں ہم دلچسپی رکھتے ہیں۔
اچھا، آئیے کچھ اور کوشش کرتے ہیں۔ آئیے ہر سال کے لیے نئے کالمز شامل کریں:
| شہر | ملک | 2018 | 2019 | 2020 |
|---|---|---|---|---|
| ٹوکیو | جاپان | 1445 | 1874 | 1690 |
| اٹلانٹا | امریکہ | 1779 | 1111 | 1683 |
| آکلینڈ | نیوزی لینڈ | 1386 | 942 | 1176 |
جبکہ یہ قطاروں کی نقل سے بچتا ہے، یہ کچھ دیگر چیلنجز پیدا کرتا ہے۔ ہمیں ہر بار جب کوئی نیا سال آئے تو اپنے ٹیبل کی ساخت کو تبدیل کرنے کی ضرورت ہوگی۔ مزید برآں، جیسے جیسے ہمارا ڈیٹا بڑھتا ہے، ہمارے سالوں کو کالمز کے طور پر رکھنا اقدار کو حاصل کرنے اور حساب کرنے میں مشکل بنا دے گا۔
اسی لیے ہمیں متعدد ٹیبلز اور تعلقات کی ضرورت ہے۔ اپنے ڈیٹا کو تقسیم کرکے ہم نقل سے بچ سکتے ہیں اور اپنے ڈیٹا کے ساتھ کام کرنے میں زیادہ لچک حاصل کر سکتے ہیں۔
تعلقات کے تصورات
آئیے اپنے ڈیٹا پر واپس جائیں اور طے کریں کہ ہم اسے کیسے تقسیم کرنا چاہتے ہیں۔ ہم جانتے ہیں کہ ہم اپنے شہروں کے لیے نام اور ملک ذخیرہ کرنا چاہتے ہیں، لہذا یہ شاید ایک ٹیبل میں بہترین کام کرے گا۔
| شہر | ملک |
|---|---|
| ٹوکیو | جاپان |
| اٹلانٹا | امریکہ |
| آکلینڈ | نیوزی لینڈ |
لیکن اگلا ٹیبل بنانے سے پہلے، ہمیں یہ معلوم کرنا ہوگا کہ ہر شہر کا حوالہ کیسے دیا جائے۔ ہمیں کسی قسم کا شناخت کنندہ، ID یا (تکنیکی ڈیٹا بیس کی اصطلاح میں) ایک پرائمری کی کی ضرورت ہے۔ پرائمری کی ایک قدر ہے جو ٹیبل میں ایک مخصوص قطار کی شناخت کے لیے استعمال ہوتی ہے۔ اگرچہ یہ خود ایک قدر پر مبنی ہو سکتی ہے (ہم مثال کے طور پر شہر کے نام کا استعمال کر سکتے ہیں)، یہ تقریباً ہمیشہ ایک نمبر یا دیگر شناخت کنندہ ہونا چاہیے۔ ہم نہیں چاہتے کہ ID کبھی تبدیل ہو کیونکہ یہ تعلق کو توڑ دے گا۔ آپ کو زیادہ تر معاملات میں ملے گا کہ پرائمری کی یا ID ایک خودکار طور پر تیار کردہ نمبر ہوگا۔
✅ پرائمری کی کو اکثر PK کے طور پر مختصر کیا جاتا ہے
شہروں کا ٹیبل
| city_id | شہر | ملک |
|---|---|---|
| 1 | ٹوکیو | جاپان |
| 2 | اٹلانٹا | امریکہ |
| 3 | آکلینڈ | نیوزی لینڈ |
✅ آپ نوٹ کریں گے کہ ہم اس سبق کے دوران "ID" اور "پرائمری کی" کی اصطلاحات کو ایک دوسرے کے ساتھ استعمال کرتے ہیں۔ یہاں کے تصورات ڈیٹا فریمز پر بھی لاگو ہوتے ہیں، جنہیں آپ بعد میں دریافت کریں گے۔ ڈیٹا فریمز "پرائمری کی" کی اصطلاح استعمال نہیں کرتے، تاہم آپ نوٹ کریں گے کہ وہ تقریباً اسی طرح کام کرتے ہیں۔
ہمارے شہروں کا ٹیبل بننے کے بعد، آئیے بارش کو ذخیرہ کریں۔ شہر کے بارے میں مکمل معلومات کو دہرانے کے بجائے، ہم ID کا استعمال کر سکتے ہیں۔ ہمیں یہ بھی یقینی بنانا چاہیے کہ نئے بنائے گئے ٹیبل میں ایک ID کالم موجود ہو، کیونکہ تمام ٹیبلز میں ایک ID یا پرائمری کی ہونا چاہیے۔
بارش کا ٹیبل
| rainfall_id | city_id | سال | مقدار |
|---|---|---|---|
| 1 | 1 | 2018 | 1445 |
| 2 | 1 | 2019 | 1874 |
| 3 | 1 | 2020 | 1690 |
| 4 | 2 | 2018 | 1779 |
| 5 | 2 | 2019 | 1111 |
| 6 | 2 | 2020 | 1683 |
| 7 | 3 | 2018 | 1386 |
| 8 | 3 | 2019 | 942 |
| 9 | 3 | 2020 | 1176 |
نوٹ کریں کہ city_id کالم نئے بنائے گئے rainfall ٹیبل کے اندر موجود ہے۔ یہ کالم وہ اقدار رکھتا ہے جو cities ٹیبل میں IDs کا حوالہ دیتے ہیں۔ تکنیکی ریلیشنل ڈیٹا کی اصطلاح میں، اسے foreign key کہا جاتا ہے؛ یہ دوسرے ٹیبل سے ایک پرائمری کی ہے۔ آپ اسے صرف ایک حوالہ یا پوائنٹر کے طور پر سوچ سکتے ہیں۔ city_id 1 ٹوکیو کا حوالہ دیتا ہے۔
[!NOTE] foreign key کو اکثر FK کے طور پر مختصر کیا جاتا ہے
ڈیٹا حاصل کرنا
ہمارا ڈیٹا دو ٹیبلز میں تقسیم ہونے کے بعد، آپ سوچ رہے ہوں گے کہ ہم اسے کیسے حاصل کریں۔ اگر ہم MySQL، SQL Server یا Oracle جیسے ریلیشنل ڈیٹا بیس استعمال کر رہے ہیں، تو ہم ایک زبان استعمال کر سکتے ہیں جسے Structured Query Language یا SQL کہا جاتا ہے۔ SQL (کبھی کبھار sequel کے طور پر تلفظ کیا جاتا ہے) ایک معیاری زبان ہے جو ریلیشنل ڈیٹا بیس میں ڈیٹا کو حاصل کرنے اور تبدیل کرنے کے لیے استعمال ہوتی ہے۔
ڈیٹا حاصل کرنے کے لیے آپ کمانڈ SELECT استعمال کرتے ہیں۔ بنیادی طور پر، آپ select کرتے ہیں کہ کون سے کالمز دیکھنا چاہتے ہیں from اس ٹیبل سے جس میں وہ موجود ہیں۔ اگر آپ صرف شہروں کے نام دکھانا چاہتے ہیں، تو آپ درج ذیل استعمال کر سکتے ہیں:
SELECT city
FROM cities;
-- Output:
-- Tokyo
-- Atlanta
-- Auckland
SELECT وہ جگہ ہے جہاں آپ کالمز کی فہرست بناتے ہیں، اور FROM وہ جگہ ہے جہاں آپ ٹیبلز کی فہرست بناتے ہیں۔
[NOTE] SQL syntax کیس-انسینسیٹو ہے، یعنی
selectاورSELECTایک ہی معنی رکھتے ہیں۔ تاہم، ڈیٹا بیس کی قسم کے لحاظ سے کالمز اور ٹیبلز کیس سینسیٹو ہو سکتے ہیں۔ نتیجتاً، یہ ایک بہترین عمل ہے کہ ہمیشہ پروگرامنگ میں ہر چیز کو کیس سینسیٹو سمجھا جائے۔ SQL کوئریز لکھتے وقت عام روایت یہ ہے کہ کی ورڈز کو تمام بڑے حروف میں لکھا جائے۔
اوپر دی گئی کوئری تمام شہروں کو دکھائے گی۔ آئیے تصور کریں کہ ہم صرف نیوزی لینڈ کے شہروں کو دکھانا چاہتے ہیں۔ ہمیں کسی قسم کا فلٹر چاہیے۔ SQL کی ورڈ اس کے لیے WHERE ہے، یا "جہاں کچھ سچ ہو"۔
SELECT city
FROM cities
WHERE country = 'New Zealand';
-- Output:
-- Auckland
ڈیٹا کو جوڑنا
اب تک ہم نے ایک ٹیبل سے ڈیٹا حاصل کیا ہے۔ اب ہم دونوں cities اور rainfall سے ڈیٹا کو اکٹھا کرنا چاہتے ہیں۔ یہ انہیں جوڑنے کے ذریعے کیا جاتا ہے۔ آپ مؤثر طریقے سے دونوں ٹیبلز کے درمیان ایک سیون بنائیں گے، اور ہر ٹیبل کے ایک کالم سے اقدار کو ملائیں گے۔
ہمارے مثال میں، ہم rainfall میں city_id کالم کو cities میں city_id کالم کے ساتھ ملائیں گے۔ یہ بارش کی مقدار کو اس کے متعلقہ شہر کے ساتھ ملائے گا۔ جوائن کی قسم جو ہم انجام دیں گے اسے inner جوائن کہا جاتا ہے، یعنی اگر کوئی قطاریں دوسرے ٹیبل سے کسی چیز کے ساتھ میل نہیں کھاتی ہیں تو وہ ظاہر نہیں ہوں گی۔ ہمارے معاملے میں ہر شہر کی بارش ہے، لہذا سب کچھ ظاہر ہوگا۔
آئیے 2019 کے سال کے لیے تمام شہروں کی بارش حاصل کریں۔
ہم یہ مراحل میں کریں گے۔ پہلا مرحلہ ڈیٹا کو جوڑنا ہے، جس میں سیون کے لیے کالمز کی نشاندہی کرنا شامل ہے - city_id جیسا کہ پہلے نمایاں کیا گیا۔
SELECT cities.city
rainfall.amount
FROM cities
INNER JOIN rainfall ON cities.city_id = rainfall.city_id
ہم نے ان دو کالمز کو نمایاں کیا ہے جنہیں ہم چاہتے ہیں، اور یہ حقیقت کہ ہم ٹیبلز کو city_id کے ذریعے جوڑنا چاہتے ہیں۔ اب ہم WHERE بیان شامل کر سکتے ہیں تاکہ صرف 2019 کا سال فلٹر ہو۔
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
خلاصہ
ریلیشنل ڈیٹا بیسز متعدد ٹیبلز کے درمیان معلومات کو تقسیم کرنے پر مرکوز ہیں، جو پھر ڈسپلے اور تجزیہ کے لیے دوبارہ اکٹھا کی جاتی ہیں۔ یہ حسابات انجام دینے اور دیگر طریقوں سے ڈیٹا کو تبدیل کرنے کے لیے اعلیٰ درجے کی لچک فراہم کرتا ہے۔ آپ نے ریلیشنل ڈیٹا بیس کے بنیادی تصورات دیکھے ہیں، اور دو ٹیبلز کے درمیان جوائن انجام دینے کا طریقہ سیکھا ہے۔
🚀 چیلنج
انٹرنیٹ پر متعدد ریلیشنل ڈیٹا بیسز دستیاب ہیں۔ آپ ان ڈیٹا کو دریافت کر سکتے ہیں جو آپ نے اوپر سیکھے گئے مہارتوں کا استعمال کرتے ہوئے۔
لیکچر کے بعد کا کوئز
لیکچر کے بعد کا کوئز
جائزہ اور خود مطالعہ
SQL اور ریلیشنل ڈیٹا بیس کے تصورات کی دریافت جاری رکھنے کے لیے Microsoft Learn پر کئی وسائل دستیاب ہیں۔
- ریلیشنل ڈیٹا کے تصورات کی وضاحت کریں
- Transact-SQL کے ساتھ کوئرینگ شروع کریں (Transact-SQL SQL کا ایک ورژن ہے)
- Microsoft Learn پر SQL مواد
اسائنمنٹ
ڈسکلیمر:
یہ دستاویز AI ترجمہ سروس Co-op Translator کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا عدم درستگی ہو سکتی ہیں۔ اصل دستاویز، جو اس کی اصل زبان میں ہے، کو مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے لیے ہم ذمہ دار نہیں ہیں۔
