🔷 رموز مخطط ER
المكونات الأساسية لـ ER
مستطيل
يمثل نوع الكيان (Entity Type)
يُستخدم لـ: الكيانات المستقلة (Regular/Strong entities)
أمثلة من الشرائح:
موظف، قسم، مشروع، طالب، مقرر
بيضاوي
يمثل صفة (Attribute)
يُستخدم لـ: الصفات البسيطة والذرية
أمثلة:
الاسم، رقم الهوية، الراتب، العنوان، العمر
معين
يمثل نوع العلاقة (Relationship Type)
يُستخدم لـ: الارتباطات بين الكيانات
أمثلة:
يعمل_في، يدير، يعمل_على، يسجل
مستطيل مزدوج
يمثل كيانًا ضعيفًا (Weak Entity Type)
يُستخدم لـ: الكيانات التي تعتمد على كيان آخر لوجودها
مثال من الشرائح:
معال (يعتمد على موظف)
معين مزدوج
يمثل علاقة محددة (Identifying Relationship)
يُستخدم لـ: العلاقات التي تساعد في تعريف الكيانات الضعيفة
مثال:
معال_لـ (علاقة محددة لكيان معال)
بيضاوي مزدوج
يمثل صفة متعددة القيم (Multivalued Attribute)
يُستخدم لـ: الصفات التي يمكن أن تأخذ قيمًا متعددة
أمثلة من الشرائح:
{مواقع} لقسم، {شهادات} لشخص، {ألوان} لسيارة
بيضاوي متقطع
يمثل صفة مشتقة (Derived Attribute)
يُستخدم لـ: الصفات التي تُحسب من صفات أخرى
مثال من الشرائح:
العمر (مشتق من تاريخ الميلاد)، عدد_الموظفين (يحسب بعد)
صفة مسطرة تحتها
تمثل صفة مفتاحية (Key Attribute)
يُستخدم لـ: الصفات التي تعرّف الكيان بشكل فريد
أمثلة:
رقم_الهوية (موظف)، رقم_القسم (قسم)، رقم_الطالب
صفة مسطرة تحتها متقطعة
تمثل مفتاحًا جزئيًا (Partial Key) للكيانات الضعيفة
يُستخدم لـ: مميز الكيان الضعيف (جزء من تعريفه)
مثال:
اسم_المعال في كيان معال
قيود المشاركة والسعة (Participation & Cardinality Constraints)
―――
خط مفرد
يمثل مشاركة جزئية (Partial Participation)
يُستخدم عندما: ليس كل الكيانات يجب أن تشارك (min = 0)
مثال:
بعض المقررات قد لا يكون لها تسجيلات
═══
خط مزدوج
يمثل مشاركة كلية (Total Participation)
يُستخدم عندما: كل كيان يجب أن يشارك (min = 1)
مثال من الشرائح:
كل موظف يجب أن يعمل_في قسم
١
السعة: ١ (واحد)
كيان يشارك في علاقة واحدة على الأكثر
يُستخدم لـ: علاقات واحد-لواحد أو واحد-لمتعدد
مثال:
موظف―١―يدير―١―قسم
ن / م
السعة: ن أو م (متعدد)
كيان يمكن أن يشارك في علاقات متعددة
يُستخدم لـ: علاقات واحد-لمتعدد أو متعدد-لمتعدد
مثال من الشرائح:
موظف―ن―يعمل_على―م―مشروع
(min, max)
ترميز min-max
يحدد الحد الأدنى والأقصى للمشاركة
(0,1) = اختياري واحد
(1,1) = إجباري واحد
(0,N) = اختياري متعدد
(1,N) = إجباري متعدد
(1,1) = إجباري واحد
(0,N) = اختياري متعدد
(1,N) = إجباري متعدد
مثال من الشرائح:
موظف (1,1)―يعمل_في―(1,N) قسم
أنواع العلاقات حسب السعة
| النوع | الترميز | الوصف | مثال من الشرائح |
|---|---|---|---|
| ١:١ | ١ ― ١ | كيان واحد في أ يرتبط بكيان واحد في ب | موظف يدير قسم |
| ١:ن | ١ ― ن | كيان واحد في أ يرتبط بعدة كيانات في ب | قسم لديه عدة موظفين |
| ن:١ | ن ― ١ | عدة كيانات في أ ترتبط بكيان واحد في ب | موظف يعمل_في قسم |
| م:ن | م ― ن | عدة كيانات في أ ترتبط بعدة كيانات في ب | موظف يعمل_على مشروع |
🔷 رموز EER (مخطط ER المحسن)
مكونات التخصص/التعميم
⊂
رمز المجموعة الجزئية (سهم على شكل U)
يشير إلى علاقة IS-A من النوع الفرعي إلى النوع الرئيسي
يشير من النوع الفرعي للأعلى نحو الدائرة المتصلة بالنوع الرئيسي
مثال:
سكرتير ⊂ موظف (سكرتير هو موظف)
○
دائرة
نقطة وصل تربط النوع الرئيسي بالأنواع الفرعية
النوع الرئيسي يتصل بالدائرة؛ الدائرة تتصل بكل الأنواع الفرعية
d
d (قيد التفرقة - Disjoint)
الكيان يمكن أن يكون عضوًا في نوع فرعي واحد فقط
نضع 'd' داخل الدائرة أو بالقرب منها
مثال من الشرائح:
موظف → {سكرتير, فني, مهندس} مع قيد d
o
o (قيد التداخل - Overlapping)
الكيان يمكن أن يكون عضوًا في أنواع فرعية متعددة في نفس الوقت
نضع 'o' داخل الدائرة أو بالقرب منها
مثال من الشرائح:
جزء → {جزء_مصنع, جزء_مشترى} مع قيد o
――
خط مفرد (من النوع الرئيسي إلى الدائرة)
تخصص جزئي - ليس كل الكيانات تحتاج أن تكون في نوع فرعي
بعض كيانات النوع الرئيسي قد لا تنتمي لأي نوع فرعي
══
خط مزدوج (من النوع الرئيسي إلى الدائرة)
تخصص كلي - كل كيان يجب أن يكون في نوع فرعي واحد على الأقل
كل كيان من النوع الرئيسي يجب أن ينتمي إلى نوع فرعي واحد على الأقل
مثال من الشرائح:
كل مركبة يجب أن تكون إما سيارة أو شاحنة (كلي)
تجميعات قيود التخصص
| التفرقة | الاكتمال | الترميز | المعنى |
|---|---|---|---|
| متفرقة (d) | كلي | d مع خط مزدوج | كل كيان في نوع فرعي واحد بالضبط |
| متفرقة (d) | جزئي | d مع خط مفرد | كيان في نوع فرعي واحد على الأكثر (أو لا شيء) |
| متقاطعة (o) | كلي | o مع خط مزدوج | كل كيان في نوع فرعي واحد أو أكثر |
| متقاطعة (o) | جزئي | o مع خط مفرد | كيان يمكن أن يكون في عدة أو بدون أنواع فرعية |
أنواع الفئات/الاتحاد (Category/Union Types)
∪
رمز الاتحاد (في دائرة)
يمثل فئة (نوع اتحادي)
النوع الفرعي هو مجموعة جزئية من اتحاد أنواع رئيسية مختلفة بمفاتيح مختلفة
مثال من الشرائح:
مالك ∪ {شخص, بنك, شركة} - المالك يمكن أن يكون شخصًا أو بنكًا أو شركة
――
خط مفرد لدائرة الاتحاد
فئة جزئية - مجموعة جزئية من الاتحاد
الفئة تحتوي على مجموعة جزئية من اتحاد جميع كيانات الأنواع الرئيسية
══
خط مزدوج لدائرة الاتحاد
فئة كلية - تحتوي على كل الاتحاد
الفئة تحتوي على الاتحاد الكامل لجميع كيانات الأنواع الرئيسية
🔷 رموز النموذج العلائقي
ترميز المخطط
R(A₁, A₂, ..., Aₙ)
مخطط العلاقة
R = اسم العلاقة، A₁...Aₙ = الصفات
مثال من الشرائح:
موظف(الاسم_الأول, الاسم_الأخير, رقم_الهوية, تاريخ_الميلاد, العنوان, الراتب, رقم_القسم)
صفة
صفة مسطرة تحتها
تشير إلى المفتاح الأساسي
مثال:
موظف(رقم_الهوية, الاسم, الراتب)
FK
مفتاح خارجي
صفة تشير إلى المفتاح الأساسي لعلاقة أخرى
غالبًا ما يشار إليه بسهم أو بعلامة FK في المخططات
مثال من الشرائح:
موظف(رقم_الهوية, رقم_القسم) حيث رقم_القسم يشير إلى قسم(رقم_القسم)
→
سهم (في المخططات)
يظهر اتجاه المرجع للمفتاح الخارجي
يشير من المفتاح الخارجي إلى المفتاح الأساسي المشار إليه
ترميز الصفوف (Tuples)
t[A]
مكون الصف
قيمة الصفة A في الصف t
مثال:
t[رقم_الهوية] يشير إلى قيمة رقم الهوية في الصف t
t[A₁, A₂, ..., Aₙ]
صف فرعي
قيم عدة صفات في الصف t
🔷 رموز التبعيات الوظيفية
رموز التبعيات الوظيفية
X → Y
تبعية وظيفية
X يحدد وظيفيًا Y
إذا كان صفان لهما نفس قيمة X، يجب أن يكون لهما نفس قيمة Y
أمثلة من الشرائح:
رقم_الهوية → اسم_الموظفرقم_المشروع → {اسم_المشروع, موقع_المشروع}
{رقم_الهوية, رقم_المشروع} → عدد_الساعات
X⁺
الغلق لـ X
مجموعة كل الصفات التي يحددها X
يُستخدم لإيجاد جميع الصفات المعتمدة وظيفيًا على X
F⁺
غلق F
مجموعة كل التبعيات الوظيفية التي تُستنتج من F
أنواع التبعيات
تبعية وظيفية كاملة
Y تعتمد على كل X (إزالة أي صفة من X يقطع التبعية)
مثال من الشرائح:
{رقم_الهوية, رقم_المشروع} → عدد_الساعات هي تبعية كاملة(لا توجد تبعية: رقم_الهوية → عدد_الساعات ولا رقم_المشروع → عدد_الساعات)
تبعية جزئية
Y تعتمد على جزء من المفتاح المركب X
مثال من الشرائح:
{رقم_الهوية, رقم_المشروع} → اسم_الموظف هي تبعية جزئية(لأن رقم_الهوية → اسم_الموظف أيضًا)
تنتهك 2NF
تبعية متعدية
X → Y و Y → Z (حيث Y ليس مفتاحًا مرشحًا)
مثال من الشرائح:
رقم_الهوية → رقم_القسم و رقم_القسم → رقم_مدير_القسمإذن رقم_الهوية → رقم_مدير_القسم هي تبعية متعدية
تنتهك 3NF
مسلمات أرمسترونج
| القاعدة | الترميز | المعنى |
|---|---|---|
| الانعكاسية | إذا كان Y ⊆ X، فإن X → Y | تبعية تافهة |
| الإضافة | إذا كان X → Y، فإن XZ → YZ | نضيف نفس الصفات للطرفين |
| التعدية | إذا كان X → Y و Y → Z، فإن X → Z | تسلسل التبعيات |
| الاتحاد | إذا كان X → Y و X → Z، فإن X → YZ | مشتق من المسلمات |
| التفكيك | إذا كان X → YZ، فإن X → Y و X → Z | مشتق من المسلمات |
🔷 الصور النمطية (Normal Forms)
| الصورة النمطية | المتطلبات | ما تمنعه | مرجع الشريحة |
|---|---|---|---|
| 1NF | كل الصفات ذرية (لا صفات مركبة أو متعددة القيم) | المجموعات المتكررة، العلاقات المتداخلة | شريحة 09 - شرائح 46-51 |
| 2NF | 1NF + لا تبعيات جزئية (الصفات غير الرئيسية تعتمد كليًا على كل المفتاح) | التبعيات الجزئية على المفاتيح المركبة | شريحة 09 - شرائح 52-54 |
| 3NF | 2NF + لا تبعيات متعدية (الصفات غير الرئيسية لا تعتمد على صفات غير رئيسية أخرى) | التبعيات المتعدية | شريحة 09 - شرائح 55-57 |
| BCNF | 3NF + كل محدد (Determinant) هو مفتاح مرشح | أي تبعية حيث المحدد ليس مفتاحًا فائقًا | شريحة 09 - شرائح 68-78 |
🔷 عوامل تشغيل وكلمات مفتاحية في SQL
عوامل المقارنة
| العامل | المعنى | مثال من الشرائح |
|---|---|---|
| = | يساوي | WHERE major = "CS" |
| <> | لا يساوي | WHERE status <> 'active' |
| < | أصغر من | WHERE age < 25 |
| > | أكبر من | WHERE salary > 30000 |
| <= | أصغر من أو يساوي | WHERE quantity <= 10 |
| >= | أكبر من أو يساوي | WHERE rating >= 4 |
العوامل المنطقية
AND
كلا الشرطين يجب أن يكونا TRUE
WHERE Fname='John' AND Lname='Smith'
OR
شرط واحد على الأقل يجب أن يكون TRUE
WHERE cus_areacode='615' OR cus_areacode='713'
NOT
ينفي الشرط
WHERE NOT status = 'inactive'
مطابقة الأنماط
LIKE
مطابقة الأنماط باستخدام أحرف البدل
WHERE Address LIKE '%Houston,TX%'
%
يطابق أي عدد من المحارف (صفر أو أكثر)
أمثلة:
'A%' - يبدأ بـ A'%son' - ينتهي بـ son
'%data%' - يحتوي على data
_
الشرطة السفلية (حرف بدل لمحرف واحد)
يطابق محرفًا واحدًا بالضبط
مثال:
'CS___' - CS متبوعًا بـ 3 محارف بالضبط
عوامل النطاق والمجموعات
BETWEEN
قيمة ضمن نطاق (شامل)
WHERE Salary BETWEEN 30000 AND 40000
IN
القيمة تطابق أيًا من القيم في قائمة
WHERE Pno IN (1, 2, 3)
NOT IN
القيمة لا تطابق أيًا من القيم في القائمة
التعامل مع NULL
IS NULL
يختبر إذا كانت القيمة NULL
WHERE Super_ssn IS NULL
IS NOT NULL
يختبر إذا كانت القيمة ليست NULL
WHERE email IS NOT NULL
مهم: لا تستخدم أبدًا = NULL أو <> NULL. استخدم دائمًا IS NULL أو IS NOT NULL.
عوامل الاستعلامات المتداخلة
EXISTS
TRUE إذا أرجع الاستعلام الداخلي صفًا واحدًا على الأقل
WHERE EXISTS (SELECT *
FROM DEPENDENT
WHERE Ssn = Essn)
FROM DEPENDENT
WHERE Ssn = Essn)
NOT EXISTS
TRUE إذا لم يُرجع الاستعلام الداخلي أي صفوف
WHERE NOT EXISTS (SELECT *
FROM DEPENDENT
WHERE Ssn = Essn)
FROM DEPENDENT
WHERE Ssn = Essn)
= ANY / IN
يساوي قيمة واحدة على الأقل في المجموعة
= ANY يكافئ IN
WHERE rating > ANY
(SELECT rating FROM Sailors
WHERE name='dustin')
(SELECT rating FROM Sailors
WHERE name='dustin')
> ALL
أكبر من جميع القيم في المجموعة
WHERE Salary > ALL
(SELECT Salary FROM EMPLOYEE
WHERE Dno=5)
(SELECT Salary FROM EMPLOYEE
WHERE Dno=5)
UNIQUE
TRUE إذا لم توجد صفوف مكررة في نتيجة الاستعلام الداخلي
دوال التجميع
COUNT(*)
عدد الصفوف
SELECT COUNT(*) FROM EMPLOYEE
COUNT(DISTINCT A)
عدد القيم الفريدة في العمود A
SELECT COUNT(DISTINCT department)
FROM Student
FROM Student
SUM(A)
مجموع القيم في العمود A
SELECT SUM(Salary) FROM EMPLOYEE
AVG(A)
متوسط القيم في العمود A
SELECT AVG(gpa) FROM Student
MAX(A)
أكبر قيمة في العمود A
SELECT MAX(gpa) FROM Student
MIN(A)
أصغر قيمة في العمود A
SELECT MIN(gpa) FROM Student
التجميع والفلترة
GROUP BY
تجميع الصفوف حسب قيم الأعمدة
يُستخدم مع دوال التجميع
SELECT Dno, COUNT(*)
FROM EMPLOYEE
GROUP BY Dno
FROM EMPLOYEE
GROUP BY Dno
HAVING
فلترة المجموعات (يُستخدم بعد GROUP BY)
WHERE يفلتر الصفوف، HAVING يفلتر المجموعات
GROUP BY Pnumber, Pname
HAVING COUNT(*) > 2
HAVING COUNT(*) > 2
ORDER BY
ترتيب النتائج حسب عمود أو أكثر
ORDER BY D.Dname, E.Lname
ASC / DESC
ترتيب تصاعدي أو تنازلي
ORDER BY age ASC
ORDER BY rating DESC
ORDER BY rating DESC
عمليات المجموعات
UNION
يدمج النتائج، ويزيل التكرارات
SELECT name FROM students
UNION
SELECT name FROM professors
UNION
SELECT name FROM professors
UNION ALL
يدمج النتائج، ويبقي التكرارات
INTERSECT
يرجع الصفوف المشتركة فقط
EXCEPT / MINUS
يرجع الصفوف من الاستعلام الأول غير الموجودة في الثاني
أنواع الربط (JOINs)
INNER JOIN
يرجع فقط الصفوف المتطابقة من كلا الجدولين
FROM A INNER JOIN B
ON A.id = B.id
ON A.id = B.id
LEFT OUTER JOIN
كل الصفوف من الجدول الأيسر + المطابقة من الأيمن
FROM Course
LEFT OUTER JOIN Faculty
ON Course.Lecturer_id = Faculty.id
LEFT OUTER JOIN Faculty
ON Course.Lecturer_id = Faculty.id
RIGHT OUTER JOIN
كل الصفوف من الجدول الأيمن + المطابقة من الأيسر
FULL OUTER JOIN
كل الصفوف من كلا الجدولين
NATURAL JOIN
يربط على كل الأعمدة المشتركة تلقائيًا
FROM EMPLOYEE
NATURAL JOIN DEPARTMENT
NATURAL JOIN DEPARTMENT
CROSS JOIN
الجداء الديكارتي (كل التركيبات)
🔷 دليل مرجعي سريع
تحديد أنواع العلاقات
كيفية التعرف على أنواع العلاقات:
- ١:١ - كلا الجانبين مُرقم بـ ١ أو (0,1) أو (1,1)
- ١:ن - جانب واحد لديه 1 أو (0,1)/(1,1)، والآخر لديه ن أو (0,N)/(1,N)
- م:ن - كلا الجانبين لديه ن/م أو (0,N)/(1,N)
أخطاء شائعة يجب تجنبها
تجنب هذه الأخطاء:
- استخدام = أو <> مع NULL (استخدم IS NULL / IS NOT NULL)
- نسيان DISTINCT عند إزالة التكرارات
- استخدام WHERE لشروط التجميع (استخدم HAVING)
- عدم تحديد شروط JOIN (يُنتج جداءً ديكارتيًا)
- خلط الأعمدة المُجمعة وغير المُجمعة بدون GROUP BY
ترتيب تنفيذ استعلام SQL
الترتيب المفاهيمي للتنفيذ:
- FROM - تحديد الجداول
- WHERE - فلترة الصفوف
- GROUP BY - تجميع الصفوف
- HAVING - فلترة المجموعات
- SELECT - اختيار الأعمدة
- ORDER BY - ترتيب النتيجة