محدد المفتاح الأساسي Primary Key Constraint
هو عنصر مهم جدا في تصميم قواعد البيانات ويلعب دور كبير في بناء تكامل البيانات Data Integrity ويضمن الدقة المطلوبة في عمليات تخزين واسترجاع وتحديث البيانات.
محدد المفتاح الأساسي يجمع خواص اثنين من المحددات هما محدد القيمة الخالية NOT NULL Constraint والذي سوف يضمن ادخال قيم في الحقل ولا يسمح بأستخدام القيمة الفارغة (NULL Value) في الحقل(لمزيد من التفاصيل يرجى مراجعة الدرس العاشر) والمحدد الثاني هو محدد القيمة الفريدة UNIQUE Constraint والذي سوف يضمن ان تكون جميع القيم في الحقل فريدة اي سوف لا يسمح بتكرار نفس القيمة في هذا الحقل(لمزيد من التفاصيل يرجى مراجعة الدرس الحادي عشر).
تكمن أهمية المفتاح الأساسي في انه يوفر معرف فريد unique identifier لكل سطر من أسطر البيانات في الجدول وبلتالي يمكننا هذا المعرف من الوصول إلى سطر البيانات للقيام بعمليات التعديل Update او حذف delete سطر البيانات من دون التأثير على الأسطر الاخرى. لشرح هذه النقطة بتفصيل أكثر لنفترض انه لدينا جدول زبائن بسيط يحتوي على اسم الزبون ورقم الهاتف فقط ولا يحتوي هذا الجدول على مفتاح أساسي. الان اذا كان لدينا سطرين فقط في هذا الجدول وكلاهما يحتويان على نفس اسم الزبون مثلا محمد أحمد و السطر الأول رقم الهاتف هو ١٢٣٤٥٦ و السطر الثاني رقم الهاتف هو ٩٨٧٦٥٥. الان اذا رغبنا ان نعدل رقم الهاتف في السطر الثاني فقط يجب أن نستخدم رقم الهاتف في جملة التعديل ولا نستطيع أن نستخدم اسم الزبون:
UPDATE CUTOMER
SET MOBILE ='9999999'
WHERE MOBILE ='987655'
العبارة السابقة سوف تعمل بشكل صحيح على تحديث فقط السطر الثاني وذلك لان رقم الهاتف كان محدد وهو يختلف عن رقم الهاتف في السطر الاول.
الان اذا استخدمنا اسم الزبون في عملية التحديث كما في العبارة التالية
UPDATE CUTOMER
SET MOBILE ='9999999'
WHERE NAME ='محمد أحمد
ما الذي سوف يحصل ؟
هنا سوف يقوم نظام قاعدة البيانات بتغيير رقم الهاتف إلى ٩٩٩٩٩٩ في كلا السطرين الأول والثاني والسبب في ذلك هو أن اسم الزبون مكرر في كلا السطرين لذلك ان عبارة WHERE سوف تعيد سطرين الأول والثاني التالي يقوم النظام بتعديل هذين السطرين. وهذا يعتبر فشل في عملية التحديث لأننا المفروض نحدث سطر واحد فقط ولكن حدثنا سطرين
الان لنفترض أن كلا السطرين يمتلكان نفس القيمة في حقل الاسم أحمد محمد ونفس رقم الهاتف ١٢٣٤٥٦ في كلا السطرين. الان اذا نفذنا اي من عبارات التعديل التالية
UPDATE CUTOMER
SET MOBILE ='999999'
WHERE NAME =' احمد محمد'
او عبارة التعديل
UPDATE CUTOMER
SET MOBILE ='999999'
WHERE MOBILE ='123456'
فإن كلا العبارتين سوف تحدث كلا السطرين ولا توجد أي طريقة لتعديل السطر الثاني فقط دون المساس السطر الأول وبنفس الطريقة سوف لا نستطيع أن نحذف فقط السطر الثاني. وهذا يعتبر خلل في تصميم جداول قاعدة البيانات.