إنشاء الجداول في SQL: CREATE TABLE والقيود
قبل أن تخزّن أي بيانات، تحتاج جدولاً يستقبلها. وتصميم الجدول جيداً من البداية يوفر عليك مشاكل كثيرة لاحقاً: بيانات ناقصة، أو مكررة، أو غير منطقية. في هذا الدرس ستتعلم كيف تنشئ جدولاً، وكيف تضع له قواعد يحرسها نظام قاعدة البيانات بنفسه.
CREATE TABLE
Section titled “CREATE TABLE”CREATE TABLE students ( id INTEGER PRIMARY KEY, name TEXT NOT NULL, age INTEGER, city TEXT DEFAULT 'القاهرة', email TEXT UNIQUE);بعد CREATE TABLE يأتي اسم الجدول، ثم بين قوسين قائمة الأعمدة مفصولة بفواصل. لكل عمود: اسم، ثم نوع، ثم قيود اختيارية.
تخيّل الجدول مثل استمارة تسجيل مطبوعة: إنشاء الجدول هو تصميم الاستمارة نفسها، بخاناتها وقواعدها: «هذه الخانة إجبارية»، «هذه الخانة أرقام فقط». أما كل طالب يملأ الاستمارة فهو صف جديد في الجدول.
أنواع البيانات
Section titled “أنواع البيانات”| النوع | يخزن | مثال |
|---|---|---|
INTEGER |
أعداد صحيحة | 14 |
REAL |
أعداد عشرية | 85.5 |
TEXT |
نصوص | 'سارة' |
DATE |
تاريخ | '2026-11-10' |
المفتاح الأساسي PRIMARY KEY
Section titled “المفتاح الأساسي PRIMARY KEY”id INTEGER PRIMARY KEY يجعل العمود id مفتاحاً أساسياً: رقماً فريداً يميز كل صف عن غيره، ولا يمكن تكراره أبداً.
لماذا نحتاجه؟ قد يكون في المدرسة طالبتان اسم كل منهما «سارة»، وعمرهما 14، ومن نفس المدينة! كيف نميز بينهما؟ بالرقم الفريد، تماماً مثل الرقم القومي أو رقم القيد في المدرسة.
القيود (Constraints)
Section titled “القيود (Constraints)”القيود قواعد يفرضها النظام على البيانات تلقائياً:
NOT NULL: الخانة إجبارية، لا تُترك فارغة.UNIQUE: لا يتكرر نفس القيمة في صفين، مثل البريد الإلكتروني.DEFAULT: قيمة تلقائية إذا لم تُعطَ قيمة.
لنجرب إضافة صف:
INSERT INTO students (id, name, age, email) VALUES (1, 'سارة', 14, 'sara@example.com');SELECT * FROM students;الناتج:
| id | name | age | city | |
|---|---|---|---|---|
| 1 | سارة | 14 | القاهرة | sara@example.com |
لاحظ أن city أخذت القاهرة تلقائياً من DEFAULT، لأننا لم نعطها قيمة. (ستتعلم INSERT بالتفصيل في درس قادم.)
القيود تحرس البيانات
Section titled “القيود تحرس البيانات”الآن جرّب كسر القواعد. طالب بلا اسم:
INSERT INTO students (id, age) VALUES (2, 15);الناتج: NOT NULL constraint failed: students.name
بريد مكرر:
INSERT INTO students (id, name, email) VALUES (3, 'منى', 'sara@example.com');الناتج: UNIQUE constraint failed: students.email
مفتاح أساسي مكرر:
INSERT INTO students (id, name) VALUES (1, 'عمر');الناتج: UNIQUE constraint failed: students.id
في كل مرة رفض النظام البيانات الخاطئة ولم يحفظها. هذه هي قوة القيود: بدلاً من أن تفحص كل البيانات في برنامجك، قاعدة البيانات نفسها تمنع الأخطاء. (نصوص رسائل الخطأ هنا من SQLite، وتختلف صياغتها قليلاً في الأنظمة الأخرى.)
تعديل الجدول: ALTER TABLE
Section titled “تعديل الجدول: ALTER TABLE”نسيت عموداً؟ أضفه دون حذف الجدول:
ALTER TABLE students ADD COLUMN phone TEXT;SELECT id, name, phone FROM students;الناتج:
| id | name | phone |
|---|---|---|
| 1 | سارة | NULL |
العمود الجديد أُضيف للصفوف الموجودة بقيمة NULL، أي «لا قيمة».
حذف الجدول: DROP TABLE
Section titled “حذف الجدول: DROP TABLE”DROP TABLE students;هذا الأمر يحذف الجدول وكل بياناته نهائياً، دون سؤال ولا تأكيد!
نصائح لتصميم الجداول
Section titled “نصائح لتصميم الجداول”- أسماء واضحة بالإنجليزية وبحروف صغيرة:
studentsوfirst_name، بلا مسافات. - مفتاح أساسي لكل جدول، وغالباً اسمه
id. - NOT NULL للبيانات الضرورية فقط، فلا تجعل كل شيء إجبارياً.
- عمود لكل معلومة: لا تضع الاسم والعمر في خانة واحدة.
جرّب بنفسك
Section titled “جرّب بنفسك”صمم جدولاً لمكتبة المدرسة باسم books، فيه:
idمفتاح أساسي.titleنص إجباري.authorنص.pagesرقم صحيح.availableرقم صحيح قيمته الافتراضية 1 (أي متاح).
ثم أضف كتابين، وجرّب إضافة كتاب بلا عنوان ولاحظ الخطأ. يمكنك التجربة مجاناً في أي محرر SQL على الإنترنت يدعم SQLite.
أخطاء شائعة
Section titled “أخطاء شائعة”- فاصلة بعد آخر عمود:
email TEXT UNIQUE,)خطأ صياغة. آخر عمود بلا فاصلة. - نسيان المفتاح الأساسي: بدونه يصعب تعديل صف محدد أو حذفه لاحقاً.
- علامات تنصيص مزدوجة للنصوص: في SQL القياسية، النصوص بين علامتين مفردتين
'سارة'.
اختبر نفسك
Section titled “اختبر نفسك”سؤال
ما وظيفة القيد NOT NULL على عمود؟
NOT NULL يمنع ترك العمود بلا قيمة، أما UNIQUE فيمنع التكرار، و DEFAULT يعطي قيمة تلقائية.
سؤال
لماذا نحتاج المفتاح الأساسي PRIMARY KEY؟
المفتاح الأساسي يميز كل صف عن غيره، حتى لو تشابهت باقي البيانات.
الخلاصة
Section titled “الخلاصة”CREATE TABLEينشئ جدولاً بأعمدة لكل منها اسم ونوع وقيود.- الأنواع الأساسية:
INTEGERوREALوTEXTوDATE، وتختلف أسماؤها قليلاً بين الأنظمة. PRIMARY KEYرقم فريد لكل صف، وNOT NULLوUNIQUEوDEFAULTقيود تحرس البيانات.ALTER TABLE ... ADD COLUMNلإضافة عمود، وDROP TABLEيحذف الجدول نهائياً.- القيود تجعل قاعدة البيانات نفسها ترفض البيانات الخاطئة.