لا يقتصر التطبيع على تقسيم جدول كبير إلى جداول أصغر. يجب أن نحافظ أيضًا على إمكانية إعادة بناء الحقائق الأصلية دون فقدان معلومات أو توليد ارتباطات لم تكن موجودة. يسمى التفكيك الذي يحقق ذلك تفكيكًا دون فقدان، وهو شرط مهم عند إعادة تصميم البيانات.
افترض أن لكل طلب عميلًا واحدًا، وأن لكل عميل اسمًا واحدًا، لكن العملاء المختلفين قد يتشاركون الاسم نفسه. عند فصل بيانات العملاء عن الطلبات، نحتفظ بمعرف العميل في جدول الطلبات، ونضع الاسم في جدول العملاء مع المعرف. الربط بالمعرف يعيد الاسم الصحيح لكل طلب حتى لو تكررت الأسماء.
مثال
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
customer_name VARCHAR(100)
);
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT NOT NULL,
FOREIGN KEY (customer_id)
REFERENCES customers(customer_id)
);
أما الاحتفاظ بالاسم وحده في الطلب، ثم استخدامه للربط، فقد يطابق عدة عملاء ويولد صفوفًا إضافية. لذلك نختار أعمدة الربط وفق المفاتيح والتبعيات المعروفة، وليس لأن قيمها تبدو مميزة في عينة صغيرة من البيانات الحالية.
باختصار: التفكيك الجيد يحفظ مفتاح الربط الذي يعيد الحقائق الأصلية دون ارتباطات زائفة.
هل تريد تعلّم SQL خطوة بخطوة مع تمارين عملية؟ تابع مسار SQL من الأساسيات للاحتراف.