🔒 فهم قيد UNIQUE في SQL: منع التكرار الذكي

قيد UNIQUE هو أحد أهم القيود في SQL الذي يضمن عدم وجود قيم مكررة في عمود معين من الجدول. يعمل هذا القيد على حماية تكامل البيانات ومنع الأخطاء الناتجة عن التكرار غير المرغوب فيه.


🎯 ما هو قيد UNIQUE؟

قيد UNIQUE يضمن أن جميع القيم في عمود معين تكون فريدة ومميزة. على عكس PRIMARY KEY الذي يمنع القيم الفارغة أيضاً، يسمح UNIQUE بقيمة NULL واحدة فقط في العمود (في معظم أنظمة إدارة قواعد البيانات).

مثال بسيط: تخيل جدول "المستخدمين" حيث يجب أن يكون البريد الإلكتروني لكل مستخدم فريداً لا يتكرر.


📝 كيفية تطبيق قيد UNIQUE

يمكن تطبيق قيد UNIQUE بطريقتين رئيسيتين:

1. أثناء إنشاء الجدول

CREATE TABLE users (
    user_id INT PRIMARY KEY,
    email VARCHAR(100) UNIQUE,
    username VARCHAR(50) UNIQUE NOT NULL
);

2. بإضافة القيد لجدول موجود

ALTER TABLE users
ADD CONSTRAINT unique_email UNIQUE (email);

💡 مثال عملي شامل

لننشئ جدول "المنتجات" حيث نريد确保 أن كل منتج له رمز فريد:

CREATE TABLE products (
    product_id INT PRIMARY KEY,
    product_code VARCHAR(20) UNIQUE,  -- كل منتج له رمز فريد
    product_name VARCHAR(100) NOT NULL,
    price DECIMAL(10, 2)
);

إدخال بيانات صحيح:

INSERT INTO products VALUES 
(1, 'P001', 'لابتوب', 1500.00),
(2, 'P002', 'هاتف', 800.00);

إدخال خاطئ (سيسبب خطأ):

INSERT INTO products VALUES (3, 'P001', 'تابلت', 500.00);
-- خطأ: قيمة مكررة في العمود product_code

⚠️ الفروق المهمة بين UNIQUE و PRIMARY KEY

الخاصية UNIQUE PRIMARY KEY
عدد الأعمدة يمكن تطبيقه على عمود أو أكثر مفتاح رئيسي واحد
القيم الفارغة يسمح بقيمة NULL واحدة لا يسمح بأي قيمة NULL
عدد القيود يمكن وجود عدة قيود UNIQUE مفتاح رئيسي واحد فقط

🛠️ إزالة قيد UNIQUE

إذا احتجت إلى إزالة قيد UNIQUE، يمكنك استخدام:

ALTER TABLE products
DROP CONSTRAINT unique_email;

📊 حالات عملية لاستخدام UNIQUE

  1. عنوان البريد الإلكتروني في جدول المستخدمين
  2. رقم الهاتف لضمان عدم التكرار
  3. الرموز التسلسلية للمنتجات
  4. أرقام الهوية في السجلات الحكومية

🎓 ماذا سنتعلم في الدرس القادم؟

في الدرس التالي، سنتعرف على قيد FOREIGN KEY وكيفية ربط الجداول معاً لإنشاء علاقات قوية بينها. سنتعلم كيفية بناء قواعد بيانات مرتبطة ومنظمة بشكل احترافي! 🚀