![]() |
|---|
| العمل مع البيانات: قواعد البيانات العلائقية - ملاحظة مرسومة بواسطة @nitya |
من المحتمل أنك قد استخدمت جدول بيانات في الماضي لتخزين المعلومات. كان لديك مجموعة من الصفوف والأعمدة، حيث تحتوي الصفوف على المعلومات (أو البيانات)، وتصف الأعمدة المعلومات (تسمى أحيانًا بيانات وصفية). تُبنى قاعدة البيانات العلائقية على هذا المبدأ الأساسي للأعمدة والصفوف في الجداول، مما يسمح لك بانتشار المعلومات عبر جداول متعددة. هذا يتيح لك العمل مع بيانات أكثر تعقيدًا، وتجنب التكرار، والحصول على مرونة في طريقة استكشاف البيانات. دعونا نستكشف مفاهيم قاعدة البيانات العلائقية.
تحتوي قاعدة البيانات العلائقية في جوهرها على جداول. تمامًا كما هو الحال مع جدول البيانات، الجدول هو مجموعة من الأعمدة والصفوف. يحتوي الصف على البيانات أو المعلومات التي نرغب في العمل معها، مثل اسم مدينة أو كمية هطول الأمطار. تصف الأعمدة البيانات التي تخزنها.
لنبدأ استكشافنا ببدء جدول لتخزين معلومات عن المدن. قد نبدأ بأسمائها وبلدانها. يمكنك تخزين هذا في جدول كما يلي:
| المدينة | البلد |
|---|---|
| طوكيو | اليابان |
| أتلانتا | الولايات المتحدة |
| أوكلاند | نيوزيلندا |
لاحظ أن أسماء الأعمدة المدينة، البلد والسكان تصف البيانات المخزنة، ولكل صف معلومات عن مدينة واحدة.
من المحتمل أن الجدول أعلاه يبدو مألوفًا نسبيًا لك. دعونا نبدأ بإضافة بعض البيانات الإضافية إلى قاعدة البيانات الناشئة لدينا - هطول الأمطار السنوي (بالمليمترات). سنركز على السنوات 2018، 2019 و2020. إذا أردنا إضافتها لطوكيو، فقد تبدو هكذا:
| المدينة | البلد | السنة | الكمية |
|---|---|---|---|
| طوكيو | اليابان | 2020 | 1690 |
| طوكيو | اليابان | 2019 | 1874 |
| طوكيو | اليابان | 2018 | 1445 |
ماذا تلاحظ عن جدولنا؟ قد تلاحظ أننا نكرر اسم وبلد المدينة مرارًا وتكرارًا. قد يشغل ذلك مساحة تخزين كبيرة، وهو غير ضروري إلى حد كبير أن يكون هناك نسخ متعددة منه. بعد كل شيء، طوكيو لها اسم واحد فقط نهتم به.
حسنًا، دعونا نجرب شيئًا آخر. دعونا نضيف أعمدة جديدة لكل سنة:
| المدينة | البلد | 2018 | 2019 | 2020 |
|---|---|---|---|---|
| طوكيو | اليابان | 1445 | 1874 | 1690 |
| أتلانتا | الولايات المتحدة | 1779 | 1111 | 1683 |
| أوكلاند | نيوزيلندا | 1386 | 942 | 1176 |
بينما يتجنب هذا تكرار الصفوف، فإنه يضيف بعض التحديات الأخرى. سنحتاج إلى تعديل هيكل جدولنا في كل مرة يظهر فيها عام جديد. بالإضافة إلى ذلك، مع نمو بياناتنا، وجود السنوات كأعمدة سيجعل من الصعب استرجاع القيم وحسابها.
لهذا السبب نحتاج إلى جداول متعددة وعلاقات. من خلال تقسيم بياناتنا، يمكننا تجنب التكرار والحصول على مزيد من المرونة في كيفية العمل مع بياناتنا.
لنعد إلى بياناتنا ونحدد كيف نريد تقسيم الأشياء. نعلم أننا نريد تخزين الاسم والبلد لمدننا، لذا من المحتمل أن يعمل هذا بشكل أفضل في جدول واحد.
| المدينة | البلد |
|---|---|
| طوكيو | اليابان |
| أتلانتا | الولايات المتحدة |
| أوكلاند | نيوزيلندا |
ولكن قبل إنشاء الجدول التالي، نحتاج إلى معرفة كيفية الإشارة إلى كل مدينة. نحتاج إلى شكل من أشكال المعرف، أو رقم تعريف أو (بمصطلحات قواعد البيانات التقنية) مفتاح أساسي. المفتاح الأساسي هو قيمة تُستخدم لتحديد صف معين في جدول. بينما يمكن أن يكون هذا مستندًا إلى قيمة بحد ذاتها (يمكننا استخدام اسم المدينة، على سبيل المثال)، يجب أن يكون دائمًا تقريبًا رقمًا أو معرفًا آخر. لا نريد أن يتغير المعرف أبدًا لأنه سيكسر العلاقة. ستجد في معظم الحالات أن المفتاح الأساسي أو المعرف سيكون رقمًا يتم إنشاؤه تلقائيًا.
✅ يُختصر المفتاح الأساسي غالبًا بـ PK
| city_id | المدينة | البلد |
|---|---|---|
| 1 | طوكيو | اليابان |
| 2 | أتلانتا | الولايات المتحدة |
| 3 | أوكلاند | نيوزيلندا |
✅ ستلاحظ أننا نستخدم مصطلحي "id" و"المفتاح الأساسي" بالتبادل خلال هذا الدرس. المفاهيم هنا تنطبق على DataFrames، التي ستستكشفها لاحقًا. لا تستخدم DataFrames مصطلح "المفتاح الأساسي"، لكنك ستلاحظ أنها تتصرف بطريقة مشابهة.
مع إنشاء جدول المدن، دعونا نخزن هطول الأمطار. بدلاً من تكرار المعلومات الكاملة عن المدينة، يمكننا استخدام المعرف. يجب علينا أيضًا التأكد من أن الجدول الجديد يحتوي على عمود 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 داخل جدول هطول الأمطار الجديد. يحتوي هذا العمود على قيم تشير إلى المعرفات في جدول المدن. بمصطلحات البيانات العلائقية التقنية، يُسمى هذا مفتاحًا أجنبيًا؛ إنه مفتاح أساسي من جدول آخر. يمكنك التفكير فيه فقط كمرجع أو مؤشر. city_id 1 تشير إلى طوكيو.
Note
يُختصر المفتاح الأجنبي غالبًا بـ FK
مع فصل بياناتنا إلى جدولين، قد تتساءل كيف نسترجعها. إذا كنا نستخدم قاعدة بيانات علائقية مثل MySQL أو SQL Server أو Oracle، يمكننا استخدام لغة تسمى لغة الاستعلامات الهيكلية أو SQL. SQL (تُنطق أحيانًا "سيكول") هي لغة معيارية تُستخدم لاسترجاع وتعديل البيانات في قاعدة بيانات علائقية.
لاسترجاع البيانات تستخدم الأمر SELECT. في جوهره، تقوم باختيار الأعمدة التي تريد رؤيتها من الجدول الذي تحتويه. إذا أردت عرض أسماء المدن فقط، يمكنك استخدام التالي:
SELECT city
FROM cities;
-- Output:
-- Tokyo
-- Atlanta
-- AucklandSELECT هو المكان الذي تسرد فيه الأعمدة، وFROM هو المكان الذي تسرد فيه الجداول.
Note
بناء جملة SQL غير حساس لحالة الأحرف، مما يعني أن select وSELECT تعنيان نفس الشيء. ومع ذلك، اعتمادًا على نوع قاعدة البيانات التي تستخدمها، قد تكون الأعمدة والجداول حساسة لحالة الأحرف. نتيجة لذلك، من الممارسات الجيدة دائمًا معاملة كل شيء في البرمجة كما لو كان حساسًا لحالة الأحرف. عند كتابة استعلامات SQL، من الشائع وضع الكلمات المفتاحية بأحرف كبيرة.
الاستعلام أعلاه سيعرض كل المدن. لنفترض أننا أردنا عرض المدن في نيوزيلندا فقط. نحتاج إلى شكل من أشكال التصفية. الكلمة المفتاحية في SQL لهذا هي WHERE، أو "حيث يكون شيء ما صحيحًا".
SELECT city
FROM cities
WHERE country = 'New Zealand';
-- Output:
-- Aucklandحتى الآن استرجعنا البيانات من جدول واحد فقط. الآن نريد جمع البيانات من كل من المدن وهطول الأمطار. يتم ذلك عن طريق دمج الجداول معًا. ستنشئ فعليًا وصلة بين الجدولين، وتطابق القيم من عمود في كل جدول.
في مثالنا، سنطابق عمود city_id في هطول الأمطار مع عمود city_id في المدن. هذا سيطابق قيمة هطول الأمطار مع مدينتها المقابلة. نوع الدمج الذي سنقوم به يسمى الدمج الداخلي، مما يعني إذا لم تتطابق أي صفوف مع أي شيء من الجدول الآخر فلن يتم عرضها. في حالتنا، كل مدينة لها بيانات هطول أمطار، لذا سيتم عرض كل شيء.
دعونا نسترجع هطول الأمطار لعام 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تتمحور قواعد البيانات العلائقية حول تقسيم المعلومات بين جداول متعددة يتم جمعها معًا للعرض والتحليل. هذا يوفر درجة عالية من المرونة لأداء الحسابات والتلاعب بالبيانات بطرق أخرى. لقد رأيت المفاهيم الأساسية لقاعدة البيانات العلائقية، وكيفية إجراء دمج بين جدولين.
هناك العديد من قواعد البيانات العلائقية المتاحة على الإنترنت. يمكنك استكشاف البيانات باستخدام المهارات التي تعلمتها أعلاه.
هناك عدة موارد متاحة على Microsoft Learn لتستمر في استكشاف مفاهيم SQL وقواعد البيانات العلائقية
- وصف مفاهيم البيانات العلائقية
- البدء في الاستعلام باستخدام Transact-SQL (Transact-SQL هو نسخة من SQL)
- محتوى SQL على Microsoft Learn
إخلاء المسؤولية:
تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية Co-op Translator. بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق به. للمعلومات الهامة، يُنصح بالاستعانة بترجمة بشرية محترفة. نحن غير مسؤولين عن أي سوء فهم أو تفسير ناتج عن استخدام هذه الترجمة.
