البرنامج SQLite هو نظام لإدراة قواعد البيانات العلائقية
(DBMS)
.فهو يستعمل نفس النموذج المعتمد في الأنظمة الأكثر شهرة كـ(MySQL, Oracle, SQL Server, MS Access)
لإنشاء العلاقات.
تنشأ العلاقة ، عندما تكون لدينا عدة جداول لديها بيانات مشتركة ، و البيانات مرتبطة بقيم متساوية ومخزنة في كل جدول.
نقوم الآن بإنشاء جدول نسميه "ATTESTATION" ثم نقوم بربطه بالجدول "
EMPLOYERS
" بواسطة علاقة : إنشاء جدول جديد
نواصل إلى الأمام ونقوم بإنشاء جدول الشهادات كما يلي:
CREATE table Attestation ( AttestationId integer not null, AtesstationLibelle varchar(100) not null, AttestationDate Date, EmployerId Integer not null, FOREIGN KEY(EmployerId) REFERENCES Employers(EmployerId) );
بنفس الطريقة التي أنشأنا بها جدول العمال، حيث أضفنا العبارة :
FOREIGN KEY
في نهاية الجملة.
هذه العبارة تمكننا من إضافة عائق في العمود
Attestation(EmployerId)
، وهذا يعني أن أي بيانات نضيفها في هذا العمود ، يجب أن يكون ما يقابلها في العمود EmployerId
في جدول العمال، وبعبارة أخرى لا يمكن استخراج شهادة إلا لعامل مسجل بقاعدة البيانات.
وإذا لم نضع هذا العائق، فإنه يصبح من الممكن استخراج شهادة لعامل غير موجود.
الآن عندما نكتب الأمر
.tables
سنحصل على ما يلي : sqlite> .tables Attestation Employers
اختبارالعلاقة:
بعد إنشاء جدول الشهادات نقوم بإدراج بعض البيانات المغلوطة يإعطاء رقم عامل غير موجود في جدول الشهادة ونشاهد ردة فعل البرنامج كمايلي:
INSERT INTO ATTESTATION VALUES (1, 'ATTESTATION DE TRAVAIL','2016-08-05',13);
النتيجة ستكون كما يلي :
sqlite> INSERT INTO ATTESTATION ...> VALUES (1, 'ATTESTATION DE TRAVAIL','2016-08-05',13); Error: FOREIGN KEY constraint failed
وكذلك عند تشغيل العبارة
SELECT
على الجدول فإننا لا نتحصل على نتائج . وهذا بسبب عائق المفتاح الخارجي foreign key
الذي عرقل إضافة القيمة الخاطئة إلى البيانات. هل المفتاح الخارجي لا يعمل ؟:
عندما نضيف قيمة مغلوطة في المفتاح الخارجي ولا نتحصل على رسالة الخطأ فهذا يعني أن عائق المفتاح الخارجي ربما لا يعمل وللتأكد من ذلك ، نطبق الكود التالي :
PRAGMA foreign_keys;
إذا كانت النتيجة هي 0 فهذا يعني أن عائق المفتاح الخارجي معطل ولتنشيطه نقوم بتطبيق الكود التالي :
PRAGMA foreign_keys = ON;
وفي هذه الحالة ، وعند تشغيل الكود :
PRAGMA foreign_keys;
سنحصل على القيمة 1 كنتيجة لهذا الأمر، وأي محاولة لإدخال قيمة لمفتاح خارجي خاطئة يؤدي إلى فشل إدخال البيانات ويعطينا رسالة خطأ المفتاح الخارجي.
بالمقابل إذا لم يعط الأمر السابق أي نتيجة ، فربما هذا يعود لكون نسخة برنامج
SQLite
قديمة (أقدم من النسخة 3.6.19
) ، أو أن البرنامج تم تنسيقه مع تعريف لقيمة الوسيط SQLITE_OMIT_FOREIGN_KEY
أو SQLITE_OMIT_TRIGGER .
إضافة المزيد من البيانات :
الآن وبعد أن تم ربط العلاقة بين الجدولين ، يمكن إضافة شهادات للعمال، مع احترام وجود رقم العامل في جدول العمال لكل شهادة كما يلي :
INSERT INTO ATTESTATION VALUES (1, 'ATTESTATION DE TRAVAIL','2016-08-05',1); INSERT INTO ATTESTATION VALUES (2, 'ATTESTATION DE TRAVAIL','2016-08-06',4); INSERT INTO ATTESTATION VALUES (3, 'ATTESTATION DE TRAVAIL','2016-08-05',9); INSERT INTO ATTESTATION VALUES (4, 'ATTESTATION DE TRAVAIL','2016-08-04',8); INSERT INTO ATTESTATION VALUES (5, 'ATTESTATION DE TRAVAIL','2016-08-05',7); INSERT INTO ATTESTATION VALUES (6, 'ATTESTATION DE TRAVAIL','2016-08-06',3);
بعدها نقوم بعرض البيانات الموجودة في كلا الجدولين باستعمال العبارة
JOIN
ليست هناك تعليقات:
إرسال تعليق