ما قاعدة البيانات؟ من الملفات إلى الجداول
لماذا لا يكفي ملف Excel؟ وكيف تنظّم قاعدة البيانات المعلومات؟ ⏱ نحو 20 دقيقة.
- تفرّق بين البيانات والمعلومات.
- تشرح مشكلات حفظ البيانات في الملفات.
- تعرّف قاعدة البيانات وأجزاء الجدول: الصف والعمود والخلية.
- تشغّل أول استعلام
SQLوتعدّله.
١البيانات حولنا في كل مكان
حين تسجّل في الكلية، أو تطلب من متجر إلكتروني، أو تسحب من الصرّاف، تُحفظ عنك بيانات: اسمك، ورقمك، وما طلبته، ومتى طلبته.
| المعنى | مثال | |
|---|---|---|
| البيانات Data | حقائق خام مفردة، لا تعني الكثير وحدها. | «سعود»، «35»، «2025-01-10» |
| المعلومات Information | بيانات نُظّمت ورُبطت فصار لها معنى يساعد على القرار. | «سعود اشترى قهوة بـ 35 ريالًا يوم 10 يناير» |
قاعدة البيانات تخزّن البيانات منظَّمة، حتى نستخرج منها المعلومات بسرعة ودقة.
٢قبل قواعد البيانات: ملف واحد كبير
تخيّل متجرًا صغيرًا يسجّل طلباته في ملف Excel واحد. بعد أشهر قليلة يبدو هكذا:
| رقم الطلب | اسم العميل | جوال العميل | مدينة العميل | المنتج |
|---|---|---|---|---|
| 1 | سعود العتيبي | 0551000001 | المدينة المنورة | قهوة عربية |
| 2 | نورة القحطاني | 0551000002 | الرياض | عسل سدر |
| 3 | سعود العتيبي | 0551000011 | المدينة المنورة | دلة قهوة |
| 4 | سعود العتيبى | 0551000001 | المدينه | شاي أخضر |
انظر إلى الخلايا الملوّنة. هذه مشكلات حقيقية تظهر مع الملفات:
- التكرار: اسم العميل وجواله ومدينته تُكتب مع كل طلب من جديد.
- عدم الاتساق: لسعود رقمان مختلفان، واسمه مكتوب بطريقتين. فأيهما الصحيح؟
- صعوبة البحث: «كم طلبًا من المدينة المنورة؟» تعطي جوابًا خاطئًا لأن المدينة مكتوبة «المدينه» مرة.
- العمل المشترك: موظفان يعدّلان الملف في الوقت نفسه، فيضيع تعديل أحدهما.
- الأمان: من يفتح الملف يرى كل شيء ويستطيع حذف أي شيء.
٣ما قاعدة البيانات؟
قاعدة البيانات Database: مجموعة من البيانات المترابطة، منظَّمة ومخزَّنة إلكترونيًّا بطريقة تسهّل الوصول إليها وإدارتها وتحديثها.
في قواعد البيانات العلائقية (أشهر الأنواع) تُنظَّم البيانات في جداول. ولكل جدول موضوع واحد: جدول للعملاء، وجدول للمنتجات، وجدول للطلبات.
| المصطلح | بالإنجليزية | معناه |
|---|---|---|
| الجدول | Table | مجموعة بيانات عن موضوع واحد، مثل العملاء. |
| الصف أو السجل | Row / Record | عنصر واحد كامل: عميل واحد بكل معلوماته. |
| العمود أو الحقل | Column / Field | معلومة واحدة تتكرر لكل الصفوف: الاسم أو المدينة. |
| الخلية | Cell | قيمة واحدة: تقاطع صف مع عمود. |
وهذا جدول العملاء الحقيقي في قاعدة بيانات «متجر الواحة» التي سنتدرّب عليها في المقرر:
customers · 10 صفوف| id | name | city | phone | joined |
|---|---|---|---|---|
| 1 | سعود العتيبي | المدينة المنورة | 0551000001 | 2024-01-15 |
| 2 | نورة القحطاني | الرياض | 0551000002 | 2024-02-03 |
| 3 | خالد الحربي | المدينة المنورة | 0551000003 | 2024-03-20 |
| 4 | ريم الشهري | جدة | 0551000004 | 2024-05-11 |
| 5 | فهد الدوسري | الرياض | 0551000005 | 2024-06-01 |
| 6 | سارة المطيري | الدمام | 0551000006 | 2024-08-17 |
| 7 | عبدالله الزهراني | جدة | NULL | 2024-09-09 |
| 8 | هند السبيعي | المدينة المنورة | 0551000008 | 2025-01-04 |
| 9 | ماجد الغامدي | تبوك | 0551000009 | 2025-02-22 |
| 10 | لمى العنزي | NULL | 0551000010 | 2025-03-30 |
لاحظ أن معلومات كل عميل مكتوبة مرة واحدة فقط. والطلبات في جدول آخر يشير إلى العميل برقمه id، فلا تكرار ولا تعارض.
٤أول سؤال لقاعدة البيانات
نسأل قاعدة البيانات بلغة اسمها SQL (تُنطق «إس كيو إل» أو «سيكوِل»). هذا أول سؤال: «اعرض كل العملاء»:
SELECT * FROM customers;| id | name | city | phone | joined |
|---|---|---|---|---|
| 1 | سعود العتيبي | المدينة المنورة | 0551000001 | 2024-01-15 |
| 2 | نورة القحطاني | الرياض | 0551000002 | 2024-02-03 |
| 3 | خالد الحربي | المدينة المنورة | 0551000003 | 2024-03-20 |
| 4 | ريم الشهري | جدة | 0551000004 | 2024-05-11 |
| 5 | فهد الدوسري | الرياض | 0551000005 | 2024-06-01 |
| 6 | سارة المطيري | الدمام | 0551000006 | 2024-08-17 |
| 7 | عبدالله الزهراني | جدة | NULL | 2024-09-09 |
| 8 | هند السبيعي | المدينة المنورة | 0551000008 | 2025-01-04 |
| 9 | ماجد الغامدي | تبوك | 0551000009 | 2025-02-22 |
| 10 | لمى العنزي | NULL | 0551000010 | 2025-03-30 |
SELECT معناها «اختر» أو «اعرض»، و * تعني «كل الأعمدة»، و FROM customers تعني «من جدول العملاء». والفاصلة المنقوطة ; تنهي الأمر.
ويمكن أن نسأل سؤالًا أدق: «أسماء العملاء الذين من المدينة المنورة فقط»:
SELECT name, cityFROM customersWHERE city = 'المدينة المنورة';
| name | city |
|---|---|
| سعود العتيبي | المدينة المنورة |
| خالد الحربي | المدينة المنورة |
| هند السبيعي | المدينة المنورة |
٥لماذا قواعد البيانات مهمة؟
| الفائدة | كيف تتحقق؟ |
|---|---|
| تنظيم البيانات | كل موضوع في جدول، وكل معلومة تُكتب مرة واحدة، فلا تكرار ولا تعارض. |
| الوصول السريع | تبحث في ملايين الصفوف خلال أجزاء من الثانية، وبسؤال واحد. |
| صحة البيانات | قواعد تمنع الأخطاء، مثل منع سعر سالب أو رقم جوال مكرر. |
| المشاركة | مئات المستخدمين والتطبيقات يعملون على القاعدة نفسها في الوقت نفسه بلا تعارض. |
| الأمان | لكل مستخدم صلاحيات: هذا يقرأ فقط، وذاك يعدّل. |
| الحفظ والاسترجاع | نسخ احتياطي واسترجاع عند الأعطال. |
والأهم: قاعدة البيانات تحوّل البيانات إلى معلومات تساعد على القرار. مثلًا: «كم طلبًا جاء من كل مدينة؟» سؤال يجيب عنه مدير المتجر بسطر واحد:
SELECT city, COUNT(*) AS orders_countFROM ordersJOIN customers ON customers.id = orders.customer_idGROUP BY cityORDER BY orders_count DESC;
| city | orders_count |
|---|---|
| المدينة المنورة | 6 |
| الرياض | 3 |
| جدة | 1 |
| تبوك | 1 |
| الدمام | 1 |
هذا الاستعلام متقدم قليلًا، وستكتب مثله بنفسك في الدرس 18. المهم الآن: سؤال واحد أعطى معلومة مفيدة من جدولين.
توقّع وتحقّق
«35» وحدها تُعد:
في جدول العملاء، عميل واحد بكل معلوماته يمثّل:
أكبر مشكلة في تكرار اسم العميل مع كل طلب:
اللغة التي نسأل بها قاعدة البيانات:
Structured Query Language.الخلاصة
- البيانات حقائق خام، والمعلومات بيانات منظمة لها معنى.
- الملفات تسبب التكرار وعدم الاتساق وصعوبة البحث والمشاركة.
- قاعدة البيانات: بيانات مترابطة منظمة في جداول. الجدول = صفوف (سجلات) × أعمدة (حقول).
- نسأل القاعدة بلغة
SQL: SELECT…FROM…
تحدٍّ برمجي: اعرض قائمة المنتجات
سهلمدير المتجر يريد قائمة بأسماء كل المنتجات وأسعارها فقط، بلا بقية الأعمدة.
- استخدم جدول المنتجات
products. - اعرض العمودين
nameوpriceفقط، بهذا الترتيب.
👀 اعرض النتيجة المطلوبة
| name | price |
|---|---|
| قهوة عربية 250غ | 35 |
| شاي أخضر | 18 |
| تمر عجوة 1كغ | 90 |
| تمر سكري 1كغ | 45 |
| عسل سدر 500غ | 150 |
| عسل زهور 500غ | 60 |
| دلة قهوة | 75 |
| فناجين (6 قطع) | 40 |
| هيل 100غ | 28 |
| زعفران 5غ | 55 |
| ماء زمزم 5لتر | 12 |
| مبخرة | 120 |
- الكود يعمل بلا أخطاء
- النتيجة فيها اسم كل منتج وسعره (12 صفًّا وعمودان)
- لا تستخدم * بل اكتب اسمي العمودين
💡 تلميح 1
💡 تلميح 2
SELECT name, price FROM …حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.
SELECT name, priceFROM products;