بياناتك جيدة فقط إذا كان بإمكانك الوثوق بها. استخدم قيود قاعدة البيانات للتأكد من أنها دقيقة وموثوقة ولا تفسد نموذج البيانات الخاص بك.

الماخذ الرئيسية

  • استخدم قيود SQL للحفاظ على تكامل البيانات وضمان التوحيد في قاعدة البيانات الخاصة بك. يفرض القيد NOT NULL على الأعمدة رفض القيم الخالية.
  • قم بتنفيذ قيود المفتاح الأساسي لضمان تفرد القيم في عمود أو مجموعة من الأعمدة. وهذا يمنع السجلات المكررة في جدول قاعدة البيانات.
  • تعمل قيود المفاتيح الخارجية على إنشاء علاقات بين الجداول وتمنع الإجراءات التي من شأنها تدمير الروابط بينها. وهي تتأكد من أن السجل الموجود في الجدول الفرعي يشير إلى الجدول الأصلي.

تعد قاعدة البيانات ضرورية للعديد من التطبيقات، ولكنها قد تصبح فوضوية إذا لم يكن لديك إرشادات لتخزين البيانات ومعالجتها.

تحدد قيود SQL قواعد لتخزين البيانات في جدول. عندما تقوم بتعيين القيود، ستلقي قاعدة البيانات خطأً إذا حاولت تخزين البيانات التي تنتهك هذه القواعد. تساعد القيود في الحفاظ على سلامة البيانات وضمان التوحيد في قاعدة البيانات الخاصة بك.

هناك عدة أنواع من قيود SQL التي يمكنك استخدامها؛ وهنا بعض من الأكثر فائدة.

instagram viewer

1. ليس القيد فارغة

تقبل أعمدة قاعدة البيانات، بشكل افتراضي، البيانات ذات القيم الخالية. NULL يعني في الأساس أنه لا توجد قيمة. يفرض القيد NOT NULL على العمود رفض القيم الخالية.

يضمن هذا القيد أن كل عمود يجب أن يحتوي على قيمة. لا يمكنك إضافة سجل إلى قاعدة البيانات دون توفير بيانات لأية أعمدة ذات القيد NOT NULL.

خذ مثال أ عملاء طاولة. هناك بعض التفاصيل الضرورية حول كل عميل والتي تريد تسجيلها، مثل اسمه. أضف القيد NOT NULL إلى الحقول الإلزامية للتأكد من أن العملاء يقدمون هذه المعلومات.

فيما يلي مثال يوضح كيف يمكنك استخدام القيد NOT NULL في ملف قاعدة بيانات PostgreSQL:

CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Mobile_No int NOT NULL,
Age int
);

إذا حاولت إدراج سجل عميل بدون عمر الحقل، ستقبله قاعدة البيانات دون أي أخطاء:

INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 0723000000);

ومع ذلك، إذا حاولت إدراج سجل بدون ملحق الاسم الأول الحقل، سترفضه قاعدة البيانات مع ظهور رسالة خطأ:

ERROR: null value in column "firstname" violates not-null constraint
Detail: Failing row contains (123456, Dior, null, 723000000, null).

2. القيد الرئيسي الأساسي

المفتاح هو سمة فريدة يتم تعيينها لعمود أو حقل يحدد صف الجدول (أو السجل) في أنظمة قواعد البيانات. يضمن قيد PRIMARY KEY تفرد القيم في عمود أو مجموعة من الأعمدة. وهو يعمل كمعرف فريد في الصف، مما يمنع السجلات المكررة في جدول قاعدة البيانات.

تحتوي المفاتيح الأساسية على قيم فريدة ولا يمكن أن تحتوي على قيم فارغة. كل جدول قاعدة بيانات SQL يجب أن يكون لديك مفتاح أساسي واحد فقط. يمكن أن يحتوي المفتاح الأساسي على أعمدة مفردة أو متعددة.

على سبيل المثال، تقوم بإنشاء قاعدة بيانات لسجلات العملاء. تحتاج إلى أن يقوم كل عميل بإدخال أرقام هويته بشكل مختلف عن أي شخص آخر. يمكنك تطبيق قيد المفتاح الأساسي للتأكد من عدم حصول أي من عملائك على نفس رقم المعرف.

يوضح التعليمة البرمجية التالية كيف يمكنك إدخال قيد المفتاح الأساسي في قاعدة بيانات MySQL:

CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (ID)
);

لن تقبل قاعدة البيانات هذه القيمة إذا قام المستخدم بإدخال سجل آخر بمعرف مماثل. بدلا من ذلك، فإنه سيتم رمي خطأ يشير إلى الازدواجية. يحاول المستخدم إدراج سجلين بنفس المعرف في المثال التالي:

INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'John', 'Doe', 35 );

INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'Mary', 'Jane', 35 );

سوف تظهر قاعدة البيانات رسالة خطأ:

Duplicate entry '1' for key 'PRIMARY'

ولكن إذا قمت بتغيير معرف العميل الثاني، تقبل قاعدة البيانات الإدخال. ولذلك، يضمن المفتاح الأساسي عدم وجود معرفات مكررة في سجلات العملاء الخاصة بك.

3. قيد المفتاح الخارجي

مفاتيح خارجية إنشاء العلاقات بين جدولين. يمكنك إضافة مفتاح خارجي إلى حقل/عمود في جدول واحد يشير إلى المفتاح الأساسي في جدول آخر.

الجدول الذي يحتوي على المفتاح الأساسي هو الجدول الأصلي، بينما الجدول الذي يحتوي على المفتاح الخارجي هو الجدول الفرعي. ولا يمكن أن يوجد السجل في الجدول التابع بدون الرجوع إلى الجدول الأصل.

يمنع قيد المفتاح الخارجي الإجراءات التي من شأنها تدمير الروابط بين الجداول. على سبيل المثال، لا يمكنك يسقط جدول واحد إذا كان يرتبط بآخر باستخدام مفتاح خارجي. سيكون عليك إسقاط كلا الجدولين مرة واحدة.

على عكس المفتاح الأساسي، يمكنك تكرار مفتاح خارجي والحصول على أكثر من مفتاح في جدول واحد. يمكن أيضًا أن تكون القيم الأساسية الخارجية باطل. في المثال التالي، يجب عليك استخدام هوية الزبون لإنشاء أمر.

CREATETABLE Customers (
customer_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50)
);

CREATETABLE Orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
);

INSERTINTO Customers(customer_id, first_name, last_name)
VALUES (1, 'Christian', 'Dior');

INSERTINTO Orders(order_id, customer_id, order_date)
VALUES (1, 1, '2023-08-07');

إذا حاولت إنشاء أمر دون وجود هوية الزبون، تظهر قاعدة البيانات رسالة خطأ:

Cannot add or update a child row: a foreign key constraint fails
(`db_9_4ee205c`.`orders`, CONSTRAINT `orders_ibfk_1` FOREIGN KEY
(`customer_id`) REFERENCES `customers` (`customer_id`))

4. القيد الفريد

يضمن هذا القيد أنه لا يوجد صفين يمكن أن يكون لهما نفس القيم لعمود معين. مثل المفاتيح الأساسية، يحافظ القيد الفريد على تكامل البيانات ويمنع الإدخالات المكررة. إذا كنت تعمل مع قاعدة بيانات سيئة التصميم دون القيد الفريد، فقد ينتهي بك الأمر إلى الاضطرار إلى القيام بذلك البحث عن التكرارات وحذفها.

على عكس المفاتيح الأساسية، يمكن أن يكون لديك العديد من القيود الفريدة في جدول واحد. على سبيل المثال، عند إنشاء عملاء الجدول، قد ترغب في الحصول على معرفات فريدة وأرقام هواتف. لإضافة مثل هذا القيد باستخدام خادم MySQL، استخدم بناء الجملة التالي:

CREATETABLE Customers (
ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);

إذا قمت بإدراج سجلات بنفس رقم الهاتف المحمول في قاعدة البيانات، فسوف تظهر رسالة خطأ.

INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 254000000 );

INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (7891011, 'Dedan', 'Kimathi', 254000000 );

ستكون رسالة الخطأ كالتالي:

Duplicate entry '254000000' for key 'Mobile_No'

يضمن هذا القيد الفريد أن قاعدة البيانات لن تحتوي على عملاء لديهم نفس المعرفات أو أرقام الهواتف المحمولة.

5. التحقق من القيد

يحد قيد التحقق من نطاق القيمة الموضوعة في العمود. ستؤدي إضافة قيد CHECK على عمود إلى السماح بقيم محددة فقط لهذا العمود. إنه يفرض تكامل البيانات من خلال التأكد من أن المستخدم يقوم فقط بإدراج البيانات الصالحة في الجدول.

يجب أن يقوم قيد التحقق بتقييم القيمة كـ TRUE أو غير معروف لكل إدخال صف أو جدول محدد. إذا كانت القيمة FALSE، فستظهر قاعدة البيانات رسالة خطأ.

على سبيل المثال، في جدول العملاء، قد ترغب فقط في خدمة العملاء الذين تزيد أعمارهم عن 18 عامًا. يمكنك إضافة قيد التحقق للتأكد من أنك لا تخدم العملاء دون السن القانونية. يمكنك إضافة القيد في قاعدة بيانات PostgreSQL، كما هو موضح في الكود التالي:

CREATETABLE Customers (
ID int NOT NULL,
Age int CHECK(Age>=18),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);

الآن إذا حاولت إدراج عمر العميل أقل من 18 عامًا:

INSERTINTO Customers (ID, Age, LastName, FirstName, Mobile_No)
VALUES (123456, 15, 'Dior', 'Christian', 1254000000 );

ستعرض قاعدة البيانات رسالة خطأ مثل هذه:

ERROR: new row for relation "customers" violates check constraint
"customers_age_check"
Detail: Failing row contains (123456, 15, Dior, Christian, 1254000000)

كيفية إضافة وإزالة قيود SQL من قواعد البيانات

قيود SQL ليست في الحجر. يمكنك إضافة أو إزالة القيود على الجداول الموجودة باستخدام عبارة ALTER TABLE. يسمح لك بيان ALTER بالعمل مع القيود التي تناسب احتياجات البيانات الخاصة بك.

هناك العديد من قيود SQL التي يمكنك تعلمها لتصميم قاعدة بيانات حسب رغبتك. يمكنك البدء بالأشخاص المذكورين في هذه المقالة.