يضمن المفتاح البديل تفرد المعرّف الداخلي، لكنه لا يعرف متى يعد صفان تكرارًا بحسب قواعد العمل. إذا كان لكل إسناد مهمة رقم تلقائي مستقل، فيمكن إدخال الموظف نفسه والمهمة نفسها مرتين والحصول على رقمين مختلفين. من منظور المفتاح الأساسي، الصفان مختلفان، رغم أنهما يمثلان الإسناد نفسه منطقيًا.
الحل هو الاحتفاظ بالمفتاح البديل وإضافة قيد يعبر عن التفرد التجاري المطلوب. في جدول الإسنادات، يكون ذلك قيد UNIQUE على زوج الموظف والمهمة. لا نضع قيد تفرد مستقلًا على الموظف، لأن ذلك سيمنعه من امتلاك أكثر من مهمة، ولا على المهمة إذا كانت قابلة للإسناد إلى عدة موظفين.
مثال
CREATE TABLE tasks (
id INT AUTO_INCREMENT PRIMARY KEY,
employee_id INT NOT NULL,
task_code INT NOT NULL,
CONSTRAINT uq_tasks_assignment
UNIQUE (employee_id, task_code)
);
يفصل هذا التصميم بين طريقة الإشارة إلى الصف وقاعدة منع تكرار معناه. ويمكن للجداول الأخرى استخدام id دون فقد حماية زوج الإسناد.
باختصار: تفرد الرقم الداخلي لا يضمن تفرد البيانات التجارية؛ أضف القيد الذي يطابق تعريف التكرار في النظام.
هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.