MyMisPal
→ دروس SQL
الدرس 12 من 12

العلاقات والتطبيع

تصميم قاعدة البيانات يبدأ بسؤال: وش العلاقة بين الأشياء؟ وهذا بالضبط اللي ترسمه في مخطط ERD.

employees badges 1 : 1

واحد لواحد: كل موظف له بطاقة دخول وحدة، وكل بطاقة لموظف واحد.

departments employees 1 : N

واحد لكثير: القسم فيه موظفين كثير، والموظف تابع لقسم واحد. المفتاح الأجنبي يكون دايماً في جهة «الكثير»: employees.dept_id.

orders products M : N

كثير لكثير: الطلب فيه منتجات كثيرة، والمنتج يظهر في طلبات كثيرة.

علاقة كثير إلى كثير ما تنحفظ مباشرة. نحلها بـجدول وسيط: الطلب الواحد فيه منتجات كثيرة، والمنتج يدخل في طلبات كثيرة، فجدول order_items يربطهم وفيه مفتاحين أجنبيين.

التطبيع (Normalization) هو تقسيم البيانات لجداول بحيث كل معلومة تنحفظ في مكان واحد. شف هذا الجدول السيئ:

order_idcustomercityproducts
1Al Noor TradingRiyadhLaptop Pro 14, 27-inch Monitor
4Al Noor TradingRiyadhWireless Router, Network Switch 24-port
13Al Noor TradingRiyadhLaptop Pro 14, Ergonomic Chair

المشكلة: اسم العميل ومدينته يتكررون مع كل طلب، والمنتجات محشورة في خانة وحدة. لو العميل غيّر مدينته لازم تعدل كل صفوفه، ولو نسيت صف صارت البيانات متناقضة.

1NFكل خانة فيها قيمة وحدة، وما فيه مجموعات متكررة.
2NF1NF + كل عمود يعتمد على المفتاح كاملاً، مو على جزء منه.
3NF2NF + ما فيه عمود يعتمد على عمود عادي ثاني (مثل المدينة تعتمد على العميل مو على الطلب).

قاعدة البيانات اللي اشتغلنا عليها مطبّعة لـ 3NF، وهذا اللي خلّى استعلامات الربط ممكنة. في المرحلة الجاية بنبني استوديو ERD عشان ترسم هذي العلاقات بنفسك ويطلع لك كود SQL تلقائياً.

تمارين

تمرين 1

استخدم الجدول الوسيط: اعرض اسم المنتج name والكمية quantity لكل منتج في الطلب رقم 2.

لقيت خطأ في هذي الصفحة، أو عندك فكرة تحسّن الموقع؟