فهم قواعد البيانات العلاقية (Relational Databases)
يلا ندخل في الموضوع على طول. لما نتكلم عن قواعد بيانات، غالبًا أول شيء يجي في بالنا هو قواعد البيانات العلاقية (RDBMS). ليش هي مشهورة كذا؟ لأنها منظمة ومرتبة، وتخلي البيانات تتواصل مع بعض بطريقة منطقية.
الأساس: الجداول (Tables)
تخيل قاعدة البيانات العلاقية كملف إكسل كبير بس ذكي. البيانات كلها تتخزن في جداول. كل جدول يمثل نوع معين من المعلومات. مثلاً، عندك جدول للموظفين، وجدول للمشاريع، وجدول للأقسام.
- الأعمدة (Columns): هذي هي الحقول أو الفئات اللي تحدد نوع البيانات. مثلاً في جدول الموظفين، عندك عمود لـ
اسم الموظف،رقم الموظف،الراتب،تاريخ التعيين. كل عمود له نوع بيانات محدد (نص، رقم، تاريخ، إلخ). - الصفوف (Rows): كل صف يمثل سجل (Record) كامل. يعني، لو عندك 10 موظفين، جدول الموظفين بيكون فيه 10 صفوف، كل صف يمثل موظف واحد بكل تفاصيله.
ملاحظة سريعة: الترتيب اللي تشوف فيه الصفوف في الجدول مو مهم بالمرة. قاعدة البيانات ما تضمن لك ترتيب معين إلا إذا أنت طلبت منها صراحة بترتيب معين (باستخدام
ORDER BY).
المفاتيح (Keys): روح العلاقة
هنا يبدأ الشغل الصح! المفاتيح هي اللي تربط الجداول ببعض وتضمن إن البيانات فريدة وما تتكرر.
المفتاح الأساسي (Primary Key - PK)
كل جدول لازم يكون عنده مفتاح أساسي. هو عمود (أو مجموعة أعمدة) يميز كل صف عن الثاني بشكل فريد. يعني ما فيه صفين ممكن يكون لهم نفس قيمة المفتاح الأساسي.
- المميزات:
- فريد (Unique): كل قيمة لازم تكون مختلفة.
- لا يمكن أن يكون فارغ (NOT NULL): لازم يكون فيه قيمة دائمًا.
- مثال: في جدول الموظفين،
رقم الموظف(EmployeeID) هو أنسب شيء يكون مفتاح أساسي.
المفتاح الأجنبي (Foreign Key - FK)
هذا هو اللي يسوي العلاقة بين الجداول. المفتاح الأجنبي في جدول هو في الأساس مفتاح أساسي في جدول ثاني. هو اللي يربط الصفوف بين الجداول.
- مثال: لو عندك جدول
الأقسام(Departments) وعندكDepartmentIDكمفتاح أساسي فيه. عشان تعرف كل موظف تابع لأي قسم، تضيف عمودDepartmentIDفي جدولالموظفين(Employees). هذا العمودDepartmentIDفي جدولالموظفينهو المفتاح الأجنبي. - الفائدة: يضمن "سلامة البيانات المرجعية" (Referential Integrity). يعني ما تقدر تضيف موظف لقسم رقمه مو موجود أساسًا في جدول الأقسام.
أنواع العلاقات (Types of Relationships)
العلاقات بين الجداول ممكن تكون على 3 أشكال رئيسية:
- واحد لواحد (One-to-One): كل سجل في الجدول الأول يرتبط بسجل واحد فقط في الجدول الثاني، والعكس صحيح. نادرة الاستخدام، وغالبًا تستخدم لفصل البيانات الكبيرة أو الحساسة.
- مثال: موظف واحد له معلومات إضافية (مثل تفاصيل جواز السفر) في جدول منفصل.
- واحد لكثير (One-to-Many): كل سجل في الجدول الأول يمكن أن يرتبط بسجلات متعددة في الجدول الثاني، لكن كل سجل في الجدول الثاني يرتبط بسجل واحد فقط في الجدول الأول. هذه هي الأكثر شيوعًا.
- مثال: قسم واحد يمكن أن يضم عدة موظفين، لكن الموظف الواحد لا يمكن أن يعمل إلا في قسم واحد. (المفتاح الأجنبي في جانب "الكثير").
- كثير لكثير (Many-to-Many): كل سجل في الجدول الأول يمكن أن يرتبط بسجلات متعددة في الجدول الثاني، والعكس صحيح. ما تقدر تسويها مباشرة بالمفاتيح الأجنبية. تحتاج لجدول وسيط (Junction Table).
- مثال: طالب واحد ممكن يسجل في عدة مواد، والمادة الواحدة ممكن يسجل فيها عدة طلاب.
- الحل: تسوي جدول ثالث (مثلاً
Enrollments- التسجيلات) فيه المفتاح الأساسي للطالب والمفتاح الأساسي للمادة كمفتاحين أجنبيين (وممكن يكونوا هم الاثنين مفتاح أساسي مركب).
مثال عملي بسيط بلغة SQL
خلنا نشوف كيف ممكن نسوي جدولين ونربطهم بـ SQL:
CREATE TABLE Departments (
DepartmentID INT PRIMARY KEY,
DepartmentName VARCHAR(100) NOT NULL
);
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
FirstName VARCHAR(50) NOT NULL,
LastName VARCHAR(50) NOT NULL,
DepartmentID INT,
FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID)
);
INSERT INTO Departments (DepartmentID, DepartmentName) VALUES
(1, 'IT'),
(2, 'HR'),
(3, 'Finance');
INSERT INTO Employees (EmployeeID, FirstName, LastName, DepartmentID) VALUES
(101, 'Ahmed', 'Ali', 1),
(102, 'Sara', 'Khalid', 1),
(103, 'Omar', 'Fahad', 2),
(104, 'Noura', 'Saud', NULL); -- موظف بدون قسم حاليًا
SELECT
E.FirstName,
E.LastName,
D.DepartmentName
FROM
Employees AS E
JOIN
Departments AS D ON E.DepartmentID = D.DepartmentID;
في هذا المثال، DepartmentID في جدول Employees هو مفتاح أجنبي يشير إلى DepartmentID في جدول Departments. هذا هو اللي يسوي العلاقة "واحد لكثير" (قسم واحد فيه كثير موظفين).
ليش نستخدم قواعد البيانات العلاقية؟
- تنظيم البيانات: سهولة البحث، التعديل، والحذف.
- تقليل التكرار (Data Redundancy): البيانات ما تتخزن في أماكن كثيرة، وهذا يوفر مساحة ويقلل الأخطاء.
- سلامة البيانات (Data Integrity): المفاتيح والعلاقات تضمن إن البيانات صحيحة ومنطقية.
- مرونة الاستعلام (Flexible Querying): تقدر تسحب البيانات اللي تحتاجها بالضبط بأي طريقة تخطر على بالك باستخدام SQL.
- أمان البيانات (Data Security): تقدر تتحكم مين يشوف إيش ويعدل إيش.
هذا كان شرح سريع ومباشر لمفهوم قواعد البيانات العلاقية. الموضوع أعمق من كذا بكثير، لكن هذي هي الأساسيات اللي لازم تفهمها عشان تبدأ صح.