تهدف هذه الوحدة إلى تمكين الطلاب من فهم لغة SQL، وكيفية إنشاء قواعد البيانات والجداول، إضافة القيود، وإنشاء أنواع بيانات خاصة بالمستخدم.
تهدف هذه الوحدة إلى تمكين الطلاب من فهم لغة SQL، وكيفية إنشاء قواعد البيانات والجداول، إضافة القيود، وإنشاء أنواع بيانات خاصة بالمستخدم.
تُعد عملية إنشاء قاعدة البيانات الخطوة الأولى في بناء أي نظام يعتمد على قواعد البيانات. يتم ذلك باستخدام أمر بسيط في SQL.
CREATE DATABASE هو أمر في لغة تعريف البيانات (DDL) ضمن SQL، يُستخدم لإنشاء قاعدة بيانات جديدة في نظام إدارة قواعد البيانات (DBMS). تُشكل قاعدة البيانات الجديدة حاوية منطقية للجداول، وجهات العرض، والإجراءات، وغيرها من كائنات قاعدة البيانات.
CREATE DATABASE database_name;
استبدل database_name بالاسم الذي ترغب في إطلاقه على قاعدة البيانات.
CREATE DATABASE UniversityDB;
يُنشئ هذا الأمر قاعدة بيانات جديدة باسم UniversityDB. بعد إنشائها، يمكنك البدء بإنشاء الجداول والكائنات الأخرى داخلها.
يمكنك تحديد خصائص إضافية لقاعدة البيانات مثل مجموعة الأحرف (Character Set) وطريقة الفرز (Collation) لضمان التعامل الصحيح مع البيانات بلغات مختلفة (خاصة العربية).
CREATE DATABASE UniversityDB
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;
تحدد هذه الخيارات أن قاعدة البيانات ستدعم ترميز UTF-8 (بما في ذلك الأحرف العربية والرموز التعبيرية) وأن الفرز سيتم بطريقة عامة وغير حساسة لحالة الأحرف.
لمزيد من المعلومات حول CREATE DATABASE، يمكنك زيارة: SQL CREATE DATABASE – W3Schools
قيود الجدول (Table Constraints) هي قواعد جوهرية تُطبق على أعمدة الجداول لفرض سلامة البيانات (Data Integrity) وضمان دقتها واتساقها. إنها تمنع إدخال بيانات غير صالحة أو غير متناسقة.
هي قواعد تُفرض على أعمدة الجداول أو على الجدول بأكمله (قيود على مستوى الجدول) لضمان صحة البيانات، فرادتها، وتناسق العلاقات بين الجداول.
يُحدد عمودًا (أو مجموعة أعمدة) يُميز كل سجل بشكل فريد داخل الجدول. لا يمكن أن يحتوي على قيم مكررة أو قيم NULL. كل جدول يجب أن يحتوي على مفتاح رئيسي واحد فقط.
CREATE TABLE Students (
StudentID INT PRIMARY KEY, -- StudentID هو المفتاح الرئيسي
Name VARCHAR(100)
);
-- مثال على مفتاح رئيسي مركب
CREATE TABLE Enrollment (
StudentID INT,
CourseID INT,
EnrollmentDate DATE,
PRIMARY KEY (StudentID, CourseID) -- المفتاح الرئيسي هو تركيبة من StudentID و CourseID
);
يُستخدم لربط جدول بآخر، ويُنشئ علاقة بينهما. يُشير المفتاح الخارجي في جدول (الجدول الفرعي/الابن) إلى المفتاح الرئيسي (أو مفتاح فريد) في جدول آخر (الجدول الرئيسي/الأب). يضمن التكامل المرجعي.
CREATE TABLE Enrollments (
EnrollmentID INT PRIMARY KEY,
StudentID INT,
CourseID INT,
Grade CHAR(1),
FOREIGN KEY (StudentID) REFERENCES Students(StudentID), -- StudentID هنا هو مفتاح خارجي يشير إلى جدول Students
FOREIGN KEY (CourseID) REFERENCES Courses(CourseID) -- CourseID هنا هو مفتاح خارجي يشير إلى جدول Courses
);
يضمن أن جميع القيم في عمود معين (أو مجموعة أعمدة) فريدة، أي لا تتكرر. يمكن أن يحتوي على قيمة NULL واحدة. يمكن أن يكون للجدول عدة قيود UNIQUE.
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
Email VARCHAR(100) UNIQUE, -- لا يمكن تكرار عنوان البريد الإلكتروني
PhoneNumber VARCHAR(20) UNIQUE
);
يُجبر العمود على احتواء قيمة. لا يمكن ترك هذا الحقل فارغًا (NULL).
CREATE TABLE Courses (
CourseID INT PRIMARY KEY,
CourseName VARCHAR(100) NOT NULL, -- اسم المقرر يجب ألا يكون فارغاً
Credits INT
);
يُستخدم لفرض شرط معين على قيم البيانات في عمود واحد أو أكثر. إذا لم يتحقق الشرط، يتم رفض إدخال البيانات.
CREATE TABLE Products (
ProductID INT PRIMARY KEY,
ProductName VARCHAR(100),
Price DECIMAL(10,2) CHECK (Price > 0), -- السعر يجب أن يكون أكبر من صفر
StockQuantity INT CHECK (StockQuantity >= 0) -- الكمية يجب أن تكون موجبة أو صفر
);
يُحدد قيمة افتراضية لعمود إذا لم تُقدم قيمة صراحةً عند إدراج صف جديد.
CREATE TABLE Orders (
OrderID INT PRIMARY KEY AUTO_INCREMENT,
OrderDate DATE DEFAULT CURRENT_DATE, -- القيمة الافتراضية هي تاريخ اليوم
OrderStatus VARCHAR(50) DEFAULT 'Pending' -- القيمة الافتراضية للحالة هي 'معلق'
);
لمزيد من التفاصيل حول قيود SQL، يمكنك زيارة: SQL Constraints – Tutorialspoint
بالإضافة إلى أنواع البيانات المدمجة في SQL (مثل INT, VARCHAR, DATE)، تسمح بعض أنظمة إدارة قواعد البيانات بإنشاء أنواع بيانات مُعرفة من قبل المستخدم (User Defined Types - UDTs).
نوع بيانات خاص تُنشئه لتحديد شكل بيانات معين يمكن استخدامه في أعمدة متعددة عبر جداول مختلفة. يتيح لك فرض قواعد عمل محددة على البيانات وتوحيد تعريفها.
ملاحظة: دعم UDT يختلف بين أنظمة DBMS. بعضها يوفر دعماً كاملاً (مثل SQL Server، Oracle مع أنواع معقدة)، بينما البعض الآخر (مثل MySQL) قد يقتصر على تعريف "Domains" أو "Aliases" لأنواع بيانات موجودة. المثال أدناه يُوضح المفهوم وقد تختلف صياغته الدقيقة بناءً على الـ DBMS.
تخيل أنك تريد تعريف نوع بيانات خاص لأرقام الهواتف، يتكون من نص لا يتجاوز 15 حرفًا. يمكنك إنشاء UDT لذلك:
-- هذه الصياغة قد تختلف حسب DBMS (مثال لـ SQL Server / Oracle)
CREATE TYPE PhoneNumber FROM VARCHAR(15);
-- استخدام النوع المعرّف من قبل المستخدم في جدول
CREATE TABLE Contacts (
ContactID INT PRIMARY KEY,
Name VARCHAR(100) NOT NULL,
Phone PhoneNumber -- استخدام نوع البيانات المخصص
);
-- مثال آخر: تعريف نوع لرمز بريدي مع تحقق
CREATE TYPE ZipCode_UDT FROM CHAR(5) NOT NULL CHECK (LEN(Value) = 5);
CREATE TABLE Addresses (
AddressID INT PRIMARY KEY,
Street VARCHAR(255),
City VARCHAR(100),
ZipCode ZipCode_UDT -- استخدام نوع الرمز البريدي المخصص
);
يتيح UDT توحيد نوع البيانات في أكثر من جدول مع إمكانية تضمين قيود التحقق (CHECK) أو غيرها من الخصائص مباشرة ضمن تعريف النوع نفسه، مما يضمن اتساق البيانات عبر قاعدة البيانات.
لمزيد من المعلومات حول UDTs (قد تختلف الأمثلة حسب DBMS)، يمكنك زيارة: User Defined Types in SQL – GeeksforGeeks
| المصطلح (الإنجليزية) | المصطلح (العربية) | التعريف |
|---|---|---|
| SQL (Structured Query Language) | لغة الاستعلامات الهيكلية | لغة قياسية تُستخدم لإدارة ومعالجة قواعد البيانات العلائقية. |
| DDL (Data Definition Language) | لغة تعريف البيانات | جزء من SQL يُستخدم لتعريف أو تعديل هيكل قاعدة البيانات (مثل CREATE, ALTER, DROP). |
| CREATE DATABASE | إنشاء قاعدة بيانات | أمر SQL DDL لإنشاء قاعدة بيانات جديدة. |
| CHARACTER SET | مجموعة الأحرف / الترميز | مجموعة من الأحرف والرموز التي يمكن تخزينها في قاعدة البيانات أو العمود. |
| COLLATE | طريقة الفرز / الترتيب | قاعدة تُحدد كيفية مقارنة وفرز البيانات النصية (مثل حساسية حالة الأحرف). |
| TABLE CONSTRAINTS | قيود الجدول | قواعد تُفرض على أعمدة أو جداول لضمان صحة وسلامة البيانات. |
| PRIMARY KEY | المفتاح الرئيسي | قيد يُحدد عمودًا (أو مجموعة أعمدة) يُميز كل سجل بشكل فريد في الجدول. |
| FOREIGN KEY | المفتاح الخارجي | قيد يُستخدم لربط جدولين من خلال الإشارة إلى المفتاح الرئيسي في جدول آخر. |
| UNIQUE | فريد | قيد يضمن أن جميع القيم في العمود المحدد فريدة ولا تتكرر. |
| NOT NULL | غير فارغ | قيد يضمن أن العمود لا يمكن أن يحتوي على قيمة فارغة (NULL). |
| CHECK | شرطي / تحقق | قيد يفرض شرطًا محددًا على القيم التي يمكن إدخالها في العمود. |
| DEFAULT | افتراضي | قيد يُحدد قيمة افتراضية لعمود في حال عدم تقديم قيمة عند الإدخال. |
| User Defined Types (UDT) | أنواع مُعرفة من قبل المستخدم | نوع بيانات خاص يُنشئه المستخدم لتعريف شكل بيانات معين، يمكن استخدامه في أعمدة متعددة. |
CREATE DATABASE لإنشاء هياكل قواعد البيانات والجداول.PRIMARY KEY، FOREIGN KEY، UNIQUE، NOT NULL، CHECK، وDEFAULT ضرورية لضمان سلامة البيانات.اختبر فهمك لمفاهيم هذه الوحدة بالإجابة على الأسئلة التالية (تذكر أن الصياغة قد تختلف قليلاً حسب نظام إدارة قواعد البيانات الذي تستخدمه):
CompanyDB. تأكد من تحديد CHARACTER SET وCOLLATE مناسبين لدعم اللغة العربية (مثل utf8mb4 و utf8mb4_general_ci).Employees يحتوي على الأعمدة التالية، مع تطبيق القيود المناسبة:
EmployeeID: رقم صحيح، مفتاح رئيسي.FirstName: نص، لا يمكن أن يكون فارغًا.LastName: نص، لا يمكن أن يكون فارغًا.Email: نص، يجب أن يكون فريدًا.Salary: رقم عشري، لا يمكن أن يكون فارغًا، ويجب أن يكون أكبر من 0.HireDate: تاريخ، القيمة الافتراضية هي تاريخ اليوم.CREATE TABLE كاملاً لهذا الجدول.
Customers (بـ CustomerID كمفتاح رئيسي، CustomerName، وPhone). ثم صمم جدولًا للطلبات باسم Orders يحتوي على الأعمدة: OrderID (PK)، OrderDate، وCustomerID.
CustomerID في جدول Orders بالمفتاح الرئيسي لجدول Customers باستخدام قيد المفتاح الخارجي.NationalID ليمثل أرقام الهوية الوطنية، بحيث يكون نوعها CHAR(10) (حرفي بطول 10) ولا يمكن أن يكون فارغًا. ثم استخدم هذا النوع في جدول Citizens (المواطنين) يحتوي على CitizenID (PK) وName وNationalID.NULL في عمود NOT NULL، أو قيمة مكررة في عمود UNIQUE). لاحظ ودوّن رسالة الخطأ التي تظهر من نظام إدارة قواعد البيانات (DBMS).