مرحباً، أنا أرحب بكم في دورة PostgreSQL SQL. في الدرس الماضي تعرفنا على الأساسيات والأنواع البيانية وكيف ننشئ قاعدة البيانات.
في هذا الدرس، سوف أتحدث عن كيف نقوم بإدارة الجداول. سنتطرق على فكرة القيود على الأعمدة (column constraints) والقيود على الجداول (table constraints) - ما هي وكيف نستطيع إنشاء هذه القيود.
أولاً، أريد أن أتأكد من أنني أمتلك قاعدة بيانات. إذا لم ترَ في الإعداد، فسأصححك في الدرس الأول - ستتعلم كيف ننشئ قاعدة البيانات.
أولاً سأنشئ قاعدة بيانات جديدة:
CREATE DATABASE YouTube;
الآن سننتقل إلى قاعدة البيانات الجديدة:
\c YouTube
البناء الأساسي لإنشاء جدول هو كالتالي:
CREATE TABLE table_name (
column_name1 data_type column_constraints,
column_name2 data_type column_constraints,
table_constraints
);
الملاحظات المهمة:
CREATE TABLE متبوعاً باسم الجدولcolumn constraints)table constraints);)إذا ضغطت على Enter دون الانتهاء بفاصلة منقوطة، فسيتم إنشاء سطر جديد فقط.
سوف أنشئ الآن جدول employee بسيط:
CREATE TABLE employee
اشترك في النشرة البريدية
دروس جديدة، مقالات، وأدوات مباشرة لبريدك.
المفتاح الأساسي (PRIMARY KEY) هو المفتاح الذي يعرّف كل صف بشكل فريد. له خصائص مهمة:
| الخاصية | الوصف |
|---|---|
| Index | يتم فهرسة المفتاح الأساسي تلقائياً |
| Unique | لا يمكن تكرار قيمة المفتاح الأساسي |
| Not Null | يجب أن تحتوي كل صف على قيمة للمفتاح الأساسي |
في مثالنا، استخدمنا SERIAL للعمود id:
id SERIAL PRIMARY KEYSERIAL هو نوع بياني متخصص يختلف عن INTEGER:
INTEGER مع إمكانية إنشاء تسلسل تلقائيالقيد NOT NULL يضمن أن المستخدم يجب أن يدخل قيمة لهذا العمود:
title TEXT NOT NULLالقيد UNIQUE يضمن عدم تكرار القيم في العمود:
email TEXT NOT NULL UNIQUEلعرض معلومات الجدول المُنشأ، استخدم الأمر:
\d employeeستحصل على نتيجة مثل:
Table "public.employee"
Column | Type | Modifiers
---------+-------------------+-----------
id | integer | not null
name | text |
title | text | not null
email | text | not null
Indexes:
"employee_pkey" PRIMARY KEY, btree (id)
Constraints:
"employee_email_key" UNIQUE CONSTRAINT, btree (email)
لاحظ أن SERIAL يتم عرضه كـ integer مع قيمة افتراضية يتم تحديثها تلقائياً.
إذا أردت تعديل جدول موجود بالفعل، استخدم ALTER TABLE:
ALTER TABLE employee
ADD COLUMN name TEXT NOT NULL;القيد CHECK يسمح لك بتحديد شرط يجب أن تستوفيه البيانات المدخلة:
ALTER TABLE employee
ADD COLUMN age SMALLINT NOT NULL CHECK (age > 18);يمكن استخدام CHECK في حالات متعددة:
بعد تنفيذ الأمر، إذا حاولت إدراج بيانات بـ age أقل من 18، ستحصل على خطأ.
القيود على مستوى الجدول (Table Constraints) تختلف عن قيود الأعمدة. تطبق قواعد على مجموعة من الأعمدة معاً.
إذا كنت تريد أن يكون المفتاح الأساسي مكوناً من أكثر من عمود واحد، استخدم هذا النمط:
CREATE TABLE employee_role (
employee_id INT,
role_id INT,
PRIMARY KEY (employee_id, role_id)
);هذا يضمن أن مزيج العمودين معاً يكون فريداً، وليس كل عمود على حدة.
بعد التنفيذ:
Table "public.employee_role"
Column | Type | Modifiers
--------------+------+-----------
employee_id | int | not null
role_id | int | not null
Indexes:
"employee_role_pkey" PRIMARY KEY, btree (employee_id, role_id)
في بعض الحالات، قد تريد تطبيق قيد UNIQUE على عدة أعمدة معاً:
CREATE TABLE employee (
first_name TEXT,
last_name TEXT,
UNIQUE (first_name, last_name)
);هذا يضمن عدم وجود شخص بنفس الاسم الأول والأخير مرتين في الجدول.
لاحظ أننا نستخدم first_name بدلاً من firstName. هذا هو المعيار المقبول في قواعد البيانات:
snake_case للأسماء المركبةcamelCase في أسماء الأعمدةفي الدروس القادمة، سوف نتحدث عن:
REFERENCES و FOREIGN KEY - لربط الجداول ببعضهاData Modeling)Join Tables)هذه المواضيع تتطلب وقتاً مخصصاً للشرح الشامل، لذلك سيتم تغطيتها لاحقاً في الدورة.