CREATE TABLE Customers (
CustomerID INT PRIMARY KEY IDENTITY,
Name NVARCHAR(100) NOT NULL
);
CustomerID INT PRIMARY KEY IDENTITY,
Name NVARCHAR(100) NOT NULL
);
🎯 ماذا تعلمنا؟
- كل جدول يمثل كيان (Entity)
- كل علاقة تمثل ارتباط منطقي
🔥 Challenge:
كيف تتوقع شكل جدول Orders؟
فكر في:
- ما هي الأعمدة؟
- كيف نربطه بـ Customers؟
💬 اكتب تصميمك في التعليقات
- كل جدول يمثل كيان (Entity)
- كل علاقة تمثل ارتباط منطقي
🔥 Challenge:
كيف تتوقع شكل جدول Orders؟
فكر في:
- ما هي الأعمدة؟
- كيف نربطه بـ Customers؟
💬 اكتب تصميمك في التعليقات
📌 Lesson 3: كيف نفكر في تصميم Orders؟
#Day4 #ERP_Project
🎯 قبل ما نكتب أي كود…
لازم نسأل:
ما هو "Order" داخل النظام؟
---
🧠 تخيل هذا السيناريو:
عميل دخل واشترى منتجات 👇
النظام لازم يسجل:
* من هو العميل؟
* متى تم الطلب؟
* ما هو رقم الطلب؟
---
💡 إذًا جدول Orders يجب أن يحتوي على:
✔️ OrderID
✔️ CustomerID
✔️ OrderDate
---
❗️ سؤال مهم:
هل نضع المنتجات داخل Orders؟ 🤔
---
🚫 الجواب: لا
ليش؟
لأن:
الطلب الواحد يحتوي على أكثر من منتج
---
🔥 Challenge:
برأيك:
ما هو الحل الصحيح لتخزين المنتجات؟
💬 اكتب فكرتك
#Day4 #ERP_Project
🎯 قبل ما نكتب أي كود…
لازم نسأل:
ما هو "Order" داخل النظام؟
---
🧠 تخيل هذا السيناريو:
عميل دخل واشترى منتجات 👇
النظام لازم يسجل:
* من هو العميل؟
* متى تم الطلب؟
* ما هو رقم الطلب؟
---
💡 إذًا جدول Orders يجب أن يحتوي على:
✔️ OrderID
✔️ CustomerID
✔️ OrderDate
---
❗️ سؤال مهم:
هل نضع المنتجات داخل Orders؟ 🤔
---
🚫 الجواب: لا
ليش؟
لأن:
الطلب الواحد يحتوي على أكثر من منتج
---
🔥 Challenge:
برأيك:
ما هو الحل الصحيح لتخزين المنتجات؟
💬 اكتب فكرتك
❤1
# 🟢 Day 4 — (فهم Orders قبل الكود)
هذا المنشور هدفه “ترتيب التفكير” وليس كتابة كود
:::writing{variant="social_post" id="58213"}
📌 Lesson 3: كيف نفكر في تصميم Orders؟
#Day4 #ERP_Project
---
🎯 قبل ما نكتب أي كود…
لازم نسأل:
ما هو "Order" داخل النظام؟
---
🧠 تخيل هذا السيناريو:
عميل دخل واشترى منتجات 👇
النظام لازم يسجل:
- من هو العميل؟
- متى تم الطلب؟
- ما هو رقم الطلب؟
---
💡 إذًا جدول Orders يجب أن يحتوي على:
✔️ OrderID
✔️ CustomerID
✔️ OrderDate
---
❗️ سؤال مهم:
هل نضع المنتجات داخل Orders؟ 🤔
---
🚫 الجواب: لا
ليش؟
لأن:
الطلب الواحد يحتوي على أكثر من منتج
---
🔥 Challenge:
برأيك:
ما هو الحل الصحيح لتخزين المنتجات؟
💬 اكتب فكرتك
هذا المنشور هدفه “ترتيب التفكير” وليس كتابة كود
:::writing{variant="social_post" id="58213"}
📌 Lesson 3: كيف نفكر في تصميم Orders؟
#Day4 #ERP_Project
---
🎯 قبل ما نكتب أي كود…
لازم نسأل:
ما هو "Order" داخل النظام؟
---
🧠 تخيل هذا السيناريو:
عميل دخل واشترى منتجات 👇
النظام لازم يسجل:
- من هو العميل؟
- متى تم الطلب؟
- ما هو رقم الطلب؟
---
💡 إذًا جدول Orders يجب أن يحتوي على:
✔️ OrderID
✔️ CustomerID
✔️ OrderDate
---
❗️ سؤال مهم:
هل نضع المنتجات داخل Orders؟ 🤔
---
🚫 الجواب: لا
ليش؟
لأن:
الطلب الواحد يحتوي على أكثر من منتج
---
🔥 Challenge:
برأيك:
ما هو الحل الصحيح لتخزين المنتجات؟
💬 اكتب فكرتك
# 🟢 Day 5 — (إنشاء Orders Table + أول ربط حقيقي)
📌 Lesson 4: إنشاء جدول Orders وربطه بـ Customers
#Day5 #ERP_Project
---
🎯 الآن نحول التفكير إلى كود 👇
---
🔥 الكود:
CREATE TABLE Orders (
OrderID INT PRIMARY KEY IDENTITY,
CustomerID INT,
OrderDate DATETIME DEFAULT GETDATE(),
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
---
💡 ماذا فعلنا هنا؟
✔️ أنشأنا جدول Orders
✔️ ربطناه بجدول Customers
✔️ كل طلب أصبح مرتبط بعميل
---
📊 هذا يسمى:
Relationship (ربط بين الجداول)
---
❗️ سيناريو مهم:
إذا حذفنا Customer مرتبط بطلب…
ماذا سيحدث؟ 🤔
---
🔥 Challenge:
جاوب:
هل يسمح النظام بالحذف أم يمنعه؟ ولماذا؟
💬 اكتب إجابتك
📌 Lesson 4: إنشاء جدول Orders وربطه بـ Customers
#Day5 #ERP_Project
---
🎯 الآن نحول التفكير إلى كود 👇
---
🔥 الكود:
CREATE TABLE Orders (
OrderID INT PRIMARY KEY IDENTITY,
CustomerID INT,
OrderDate DATETIME DEFAULT GETDATE(),
FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
---
💡 ماذا فعلنا هنا؟
✔️ أنشأنا جدول Orders
✔️ ربطناه بجدول Customers
✔️ كل طلب أصبح مرتبط بعميل
---
📊 هذا يسمى:
Relationship (ربط بين الجداول)
---
❗️ سيناريو مهم:
إذا حذفنا Customer مرتبط بطلب…
ماذا سيحدث؟ 🤔
---
🔥 Challenge:
جاوب:
هل يسمح النظام بالحذف أم يمنعه؟ ولماذا؟
💬 اكتب إجابتك
❤1
# 🟢 Day 6 — (حل المشكلة الحقيقية: OrderDetails)
📌 Lesson 5: حل مشكلة المنتجات داخل الطلب (OrderDetails)
#Day6 #ERP_Project
---
🎯 المشكلة:
الطلب يحتوي على عدة منتجات ❗️
---
❌ لا يمكن تخزينها داخل Orders
---
💡 الحل الاحترافي:
إنشاء جدول جديد:
OrderDetails
---
🔥 الكود:
CREATE TABLE OrderDetails (
ID INT PRIMARY KEY IDENTITY,
OrderID INT,
ProductID INT,
Quantity INT,
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID)
);
---
📊 ماذا حللنا؟
✔️ فصلنا الطلب عن التفاصيل
✔️ أصبح كل طلب يحتوي على عدة منتجات
✔️ حللنا مشكلة Many-to-Many
---
🎯 أصبح النظام كالتالي:
Orders → معلومات عامة
OrderDetails → تفاصيل المنتجات
---
🔥 Challenge:
ما نوع العلاقة بين:
Orders و OrderDetails ؟
💬 اكتب الإجابة
:::
📌 Lesson 5: حل مشكلة المنتجات داخل الطلب (OrderDetails)
#Day6 #ERP_Project
---
🎯 المشكلة:
الطلب يحتوي على عدة منتجات ❗️
---
❌ لا يمكن تخزينها داخل Orders
---
💡 الحل الاحترافي:
إنشاء جدول جديد:
OrderDetails
---
🔥 الكود:
CREATE TABLE OrderDetails (
ID INT PRIMARY KEY IDENTITY,
OrderID INT,
ProductID INT,
Quantity INT,
FOREIGN KEY (OrderID) REFERENCES Orders(OrderID)
);
---
📊 ماذا حللنا؟
✔️ فصلنا الطلب عن التفاصيل
✔️ أصبح كل طلب يحتوي على عدة منتجات
✔️ حللنا مشكلة Many-to-Many
---
🎯 أصبح النظام كالتالي:
Orders → معلومات عامة
OrderDetails → تفاصيل المنتجات
---
🔥 Challenge:
ما نوع العلاقة بين:
Orders و OrderDetails ؟
💬 اكتب الإجابة
:::
🔥 تحدي :
اكتب استعلام يعرض:
اسم العميل + تاريخ الطلب
💬 اكتب الحل في التعليقات
اكتب استعلام يعرض:
اسم العميل + تاريخ الطلب
💬 اكتب الحل في التعليقات
❤1
🎯 Lesson 7 — Foreign Keys
ليست مجرد سطر SQL... إنها حارس بيانات النظام
📌 Lesson 7 — هل يمكن إنشاء طلب لعميل غير موجود؟ 🤔
تخيل أنك تعمل على نظام مبيعات...
وأحد المبرمجين نفذ هذا الأمر:
لكن...
❗️العميل رقم 999 غير موجود أصلاً!
هل يجب أن يسمح النظام بهذا؟
لو سمح بذلك...
سيصبح لدينا طلب بدون صاحب!
وهنا تبدأ مشاكل التقارير والفواتير والأنظمة المالية.
💡 لهذا السبب نستخدم Foreign Key.
هو لا يربط الجداول فقط...
بل يحمي البيانات من الأخطاء.
🎯 بدون Foreign Key:
❌ Orders قد تشير إلى Customer غير موجود.
أما مع Foreign Key:
✅ النظام يمنع الخطأ قبل تخزين البيانات.
ليست مجرد سطر SQL... إنها حارس بيانات النظام
📌 Lesson 7 — هل يمكن إنشاء طلب لعميل غير موجود؟ 🤔
تخيل أنك تعمل على نظام مبيعات...
وأحد المبرمجين نفذ هذا الأمر:
INSERT INTO Orders(CustomerID)
VALUES(999);
لكن...
❗️العميل رقم 999 غير موجود أصلاً!
هل يجب أن يسمح النظام بهذا؟
لو سمح بذلك...
سيصبح لدينا طلب بدون صاحب!
وهنا تبدأ مشاكل التقارير والفواتير والأنظمة المالية.
💡 لهذا السبب نستخدم Foreign Key.
هو لا يربط الجداول فقط...
بل يحمي البيانات من الأخطاء.
🎯 بدون Foreign Key:
❌ Orders قد تشير إلى Customer غير موجود.
أما مع Foreign Key:
✅ النظام يمنع الخطأ قبل تخزين البيانات.
❤4
تخيل أن مدير الشركة طلب منك تقريرًا يحتوي على:
✅ رقم الطلب
✅ اسم العميل
✅ تاريخ الطلب
لكن...
اسم العميل موجود في جدول Customers.
ورقم الطلب موجود في Orders.
كيف نجمعهما؟
هنا يأتي دور INNER JOIN.
🎯 Challenge
قبل رؤية الكود...
توقع النتيجة.
هل سيظهر كل العملاء؟
أم فقط العملاء الذين لديهم طلبات؟
اكتب توقعك.
✅ رقم الطلب
✅ اسم العميل
✅ تاريخ الطلب
لكن...
اسم العميل موجود في جدول Customers.
ورقم الطلب موجود في Orders.
كيف نجمعهما؟
هنا يأتي دور INNER JOIN.
🎯 Challenge
قبل رؤية الكود...
توقع النتيجة.
هل سيظهر كل العملاء؟
أم فقط العملاء الذين لديهم طلبات؟
اكتب توقعك.
الكود
SELECT
O.OrderID,
C.CustomerName,
O.OrderDate
FROM Orders O
INNER JOIN Customers C
ON O.CustomerID = C.CustomerID;
SELECT
O.OrderID,
C.CustomerName,
O.OrderDate
FROM Orders O
INNER JOIN Customers C
ON O.CustomerID = C.CustomerID;
🚨 تحدي اليوم
لدينا:
Customers
Orders
السؤال:
بعد تنفيذ INNER JOIN...
هل سيظهر Ali؟
ولماذا؟
💬 ممنوع تشغيل SQL.
أجب بالتفكير فقط.
لدينا:
Customers
Ahmed
Sara
Ali
Orders
Ahmed
Sara
السؤال:
بعد تنفيذ INNER JOIN...
هل سيظهر Ali؟
ولماذا؟
💬 ممنوع تشغيل SQL.
أجب بالتفكير فقط.
Lesson 9
First ERP Report
📌 Lesson 9 | أول تقرير احترافي في SQL Server
تخيل أنك انتهيت من تصميم قاعدة البيانات...
لكن مدير الشركة قال لك:
هنا تبدأ وظيفة SQL الحقيقية.
ليست إنشاء الجداول...
بل استخراج المعلومات منها.
اليوم سنبني أول تقرير يشبه ما تراه داخل أنظمة ERP.
💬 سؤال اليوم:
برأيك...
ما المعلومات التي يجب أن تظهر داخل تقرير الطلبات؟
اكتب اقتراحك قبل أن نبدأ.
First ERP Report
📌 Lesson 9 | أول تقرير احترافي في SQL Server
تخيل أنك انتهيت من تصميم قاعدة البيانات...
لكن مدير الشركة قال لك:
"أريد تقريرًا يعرض الطلبات."
هنا تبدأ وظيفة SQL الحقيقية.
ليست إنشاء الجداول...
بل استخراج المعلومات منها.
اليوم سنبني أول تقرير يشبه ما تراه داخل أنظمة ERP.
💬 سؤال اليوم:
برأيك...
ما المعلومات التي يجب أن تظهر داخل تقرير الطلبات؟
اكتب اقتراحك قبل أن نبدأ.
🧠 سيناريو ERP
شركة تبيع أجهزة إلكترونية.
في نهاية اليوم، مدير المبيعات طلب تقريرًا يحتوي على:
رقم الطلب.
اسم العميل.
تاريخ الطلب.
ولا يريد أن يفتح ثلاثة جداول مختلفة.
المطلوب تقرير واحد فقط.
SELECT
O.OrderID,
C.CustomerName,
O.OrderDate
FROM Orders AS O
INNER JOIN Customers AS C
ON O.CustomerID = C.CustomerID
ORDER BY O.OrderDate DESC;
🧠 لا نحفظ اسم العميل داخل Orders...
بل نجلبه وقت إنشاء التقرير.
شركة تبيع أجهزة إلكترونية.
في نهاية اليوم، مدير المبيعات طلب تقريرًا يحتوي على:
رقم الطلب.
اسم العميل.
تاريخ الطلب.
ولا يريد أن يفتح ثلاثة جداول مختلفة.
المطلوب تقرير واحد فقط.
SELECT
O.OrderID,
C.CustomerName,
O.OrderDate
FROM Orders AS O
INNER JOIN Customers AS C
ON O.CustomerID = C.CustomerID
ORDER BY O.OrderDate DESC;
🧠 لا نحفظ اسم العميل داخل Orders...
بل نجلبه وقت إنشاء التقرير.
🚨 تحدي اليوم
يريد المدير إضافة عمود جديد داخل التقرير:
لدينا الآن:
Customers
Orders
OrderDetails
السؤال:
هل يكفي استخدام INNER JOIN بين جدولين؟
أم سنحتاج إلى ربط جدول ثالث؟
💬 اكتب إجابتك...
ولا تكتب الكود.
فكر كمطور نظام.
يريد المدير إضافة عمود جديد داخل التقرير:
عدد المنتجات داخل كل طلب
لدينا الآن:
Customers
Orders
OrderDetails
السؤال:
هل يكفي استخدام INNER JOIN بين جدولين؟
أم سنحتاج إلى ربط جدول ثالث؟
💬 اكتب إجابتك...
ولا تكتب الكود.
فكر كمطور نظام.
Lesson 10 LEFT JOIN
كيف نعرض جميع العملاء...
حتى الذين لم يطلبوا أي شيء؟
#SQLServer #ERP_Project
تخيل أنك مدير المبيعات...
وطلبت من المبرمج تقريرًا يحتوي على:
✅ جميع العملاء
حتى العملاء الذين لم يشتروا أي شيء حتى الآن.
لكن...
عندما استخدمنا INNER JOIN
اختفى بعض العملاء!
😨
لماذا؟
لأن INNER JOIN يعرض فقط البيانات المتطابقة.
لكن المدير يريد الجميع.
حتى العملاء الذين لم ينفذوا أي طلب.
هنا يأتي دور...
🔥 LEFT JOIN
كيف نعرض جميع العملاء...
حتى الذين لم يطلبوا أي شيء؟
#SQLServer #ERP_Project
تخيل أنك مدير المبيعات...
وطلبت من المبرمج تقريرًا يحتوي على:
✅ جميع العملاء
حتى العملاء الذين لم يشتروا أي شيء حتى الآن.
لكن...
عندما استخدمنا INNER JOIN
اختفى بعض العملاء!
😨
لماذا؟
لأن INNER JOIN يعرض فقط البيانات المتطابقة.
لكن المدير يريد الجميع.
حتى العملاء الذين لم ينفذوا أي طلب.
هنا يأتي دور...
🔥 LEFT JOIN