The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.
Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by ibrquqa65, 2022-09-21 15:14:43

Database-design-ar-hsoub-academy-v1.0

Database-design-ar-hsoub-academy-v1.0

‫تصميم قواعد البيانات‬ ‫لغة معالجة البيانات ‪ DML‬الخاصة بلغة ‪SQL‬‬

‫‪ .9‬اعرض جميع الصفوف التي تحتوي ضمنها على القيمة ‪ 60‬في حقل شروط الدفع ‪ ،payterms‬واستخدم‬
‫جدول المبيعات ‪.Sales‬‬

‫‪ .10‬اعرض جمي ع الم ؤلفين ال ذين تت ألف أس ماؤهم الأولى من خمس ة مح ارف‪ ،‬أو تنتهي ب المحرف ‪ O‬أو‬
‫بالمحرف ‪ ،A‬وتبدأ بالحرف ‪ M‬أو بالحرف ‪.P‬‬

‫‪ .11‬اعرض جمي ع عن اوين الكتب ال تي تكلفته ا أك ثر من ‪ 30‬دولا ًرا‪ ،‬وإم ا تب دأ بح رف ‪ T‬أو مع رِّف ناش رها‬
‫هو ‪.0877‬‬

‫‪ .12‬اعرض من جدول الموظفين ‪ Employees‬أعمدة الاس م الأول ‪ ،fname‬واس م العائل ة ‪ ،lname‬ومع رِّف‬
‫الموظف ‪ ،emp_id‬والمستوى الوظيفي ‪ job_lvl‬للم وظفين ال ذين مس تواهم ال وظيفي أك بر من ‪،200‬‬
‫وأ ِعد تسمية عناوين هذه الأعم دة لتص بح "‪ "First Name‬و "‪ "Last Name‬و "‪"IDENTIFICATION‬‬

‫و "‪."Job Level‬‬
‫‪ .13‬اع رض قيم ة حق وق المؤل ف ‪ ،royalty‬وحق وق المؤل ف مض ا ًفا إليه ا ‪ %50‬م ع تس مية ه ذا الحقل‬

‫إلى "‪ ،"royalty plus 50‬ومعرِّف العنوان ‪ ،title_id‬وذلك باستخدام جدول ‪.Roysched‬‬

‫‪ .14‬أن ِشئ السلسلة "‪ "12xxxx567‬من السلسلة "‪ "1234567‬باستخدام الدالة ‪.STUFF‬‬
‫‪ .15‬اعرض أول ‪ 40‬محر ًفا من كل عنوان كتاب‪ ،‬إلى جانب متوسط المبيعات الشهرية لهذا العنوان حتى الآن‬

‫أي ‪ ،ytd_sales / 12‬واستخ ِدم جدول العناوين ‪.Title‬‬

‫‪ .16‬اعرض عدد الكتب التي حُ ِّددت أسعارها‪.‬‬
‫‪ .17‬اعرض قائم ًة بكتب الطبخ مع متوسط تكلفة جميع الكتب لكل نوع باستخدام الأمر ‪.GROUP BY‬‬

‫إليك مجموعة أسئلة متقدمة باستخدام الاستعلامات ‪ Union‬و ‪ Intersect‬و ‪:Minus‬‬

‫‪ .1‬تعمل مع املات المجموع ات العلائقي ة ‪ ،UNION‬و‪ ،INTERSECT‬و‪ MINUS‬بص ورة ص حيحة فق ط إذا‬
‫كانت العلاقات متوافق ة م ع الاتح اد ‪ ،union-compatible‬فم اذا يع ني التواف ق م ع الاتح اد؟ وكي ف‬

‫يمكنك التحقق من هذا الشرط؟‬

‫‪ .2‬ما هو الفرق بين ‪ ،UNION‬و‪UNION ALL‬؟ واكتب صيغة كل منهما‪.‬‬
‫‪ .3‬لنفترض أن ل ديك ج دولَين هم ا ‪ Employees‬و‪ ،Employees_1‬بحيث يحت وي الج دول ‪Employees‬‬
‫على سجلات لثلاثة م وظ ِفين‪ ،‬هم‪ ،Alice Cordoza :‬و‪ ،John Cretchakov‬و‪ ،Anne McDonald‬كم ا‬
‫يحتوي الجدول ‪ Employees_1‬على سجلات الموظ َفين ‪ ،John Cretchakov‬و‪Mary Chen‬؛ ما هو خرج‬

‫الاستعلام ‪ UNION‬باستخدام المعلومات السابقة؟ اعرض قائم ًة بخرج هذا الاستعلام‪.‬‬

‫‪151‬‬

‫تصميم قواعد البيانات‬ ‫لغة معالجة البيانات ‪ DML‬الخاصة بلغة ‪SQL‬‬

‫‪ .4‬استخدم معلومات الموظف في السؤال رقم ‪ 3‬لمعرف ة خ رج الاس تعلام ‪ ،UNION ALL‬واع رض قائم ًة‬
‫بخرج هذا الاستعلام‪.‬‬

‫‪ .5‬استخدم معلومات الموظف في السؤال رقم ‪ 3‬لمعرف ة خ رج الاس تعلام ‪ ،INTERSECT‬واع رض قائم ًة‬
‫بخرج هذا الاستعلام‪.‬‬

‫‪ .6‬استخدم معلومات الموظف في السؤال رقم ‪ 3‬لمعرفة خرج الاستعلام ‪ ،EXCEPT‬واع رض قائم ًة بخ رج‬
‫هذا الاستعلام‪.‬‬

‫‪ .7‬ما هو الضم المتقاطع ‪cross join‬؟ واع ِط مثااًل عن صيغته‪.‬‬

‫‪ .8‬اشرح هذه الأنواع الثلاثة للضم‪:‬‬

‫‪ .1‬الضم الخارجي اليساري ‪left outer join‬‬

‫‪ .2‬الضم الخارجي اليميني ‪right outer join‬‬

‫‪ .3‬الضم الخارجي الكامل ‪full outer join‬‬

‫‪ .9‬ما هو الاستعلام الفرعي ‪ ،subquery‬وما هي خصائصه الأساسية؟‬
‫‪ .10‬ما هو الاستعلام الفرعي المرتبط ‪correlated subquery‬؟ واع ِط مثااًل على ذلك‪.‬‬

‫‪ .11‬افترض أ ّن جدول المنتجات ‪ Product‬يحتوي على سمتين هما ‪ ،PROD_CODE‬و‪ ،VEND_CODE‬وقيم‬
‫السمة ‪ PROD_CODE‬هي‪ ،ABC :‬و‪ ،DEF‬و‪ ،GHI‬و‪ ،JKL‬حيث يجري مطابقة هذه القيم م ع قيم الس مة‬
‫‪ VEND_CODE‬التالي ة‪ ،125 :‬و‪ ،124‬و‪ ،124‬و‪ 123‬على الت والي‪ ،‬فمثاًل ‪ ،‬تقاب ل قيم ة الس مة‬
‫‪ PROD_CODE‬ال تي هي ‪ ABC‬قيم ة الس مة ‪ VEND_CODE‬ال تي هي ‪ ،125‬كم ا يحت وي ج دول‬
‫الب ائعين ‪ Vendor‬على س مة واح دة هي ‪ VEND_CODE‬ال تي له ا القيم التالي ة‪ 123 :‬و ‪ 124‬و‪125‬‬
‫و ‪ 126‬حيث تُ َع ّد السمة ‪ VEND_CODE‬في جدول المنتجات مفتا ًحا خارج ًيا للسمة ‪ VEND_CODE‬في‬

‫جدول البائعين‪.‬‬

‫‪ .12‬ما هو خرج الاستعلامات التالية باستخدام المعلومات الموجودة في السؤال رقم ‪11‬؟‬

‫‪ .1‬الاستعلام ‪ UNION‬بنا ًء على هذين الجدولين‪.‬‬

‫‪ .2‬الاستعلام ‪ UNION ALL‬بنا ًء على هذين الجدولين‪.‬‬

‫‪ .3‬الاستعلام ‪ INTERSECT‬بنا ًء على هذين الجدولين‪.‬‬

‫‪ .4‬الاستعلام ‪ MINUS‬بنا ًء على هذين الجدولين‪.‬‬

‫إليك أسئلة متقدمة باستخدام الضم ‪:Joins‬‬

‫‪152‬‬

‫تصميم قواعد البيانات‬ ‫لغة معالجة البيانات ‪ DML‬الخاصة بلغة ‪SQL‬‬

‫‪ .1‬اعرض قائم ًة بجميع عناوين الكتب‪ ،‬وأرقام المبيعات في جدولي الكتب ‪ ،Books‬والمبيعات ‪ ،Sales‬بما‬
‫في ذلك العناوين التي لا تحتوي على مبيعات باستخدام عملية الضم ‪.join‬‬

‫‪ .2‬اعرض قائم ًة بأسماء عائلات المؤلفين‪ ،‬وجميع عناوين الكتب المنشورة‪ ،‬والمرتبطة بك ل مؤل ف‪ ،‬بحيث‬
‫تكون مرتب ًة حسب اسم عائلة المؤلف باستخدام الضم‪ ،‬ثم احفظ ذل ك على أس اس ع رض ‪ view‬ي دعى‬

‫‪.Published Authors‬‬

‫‪ .3‬استخدم استعلا ًما فرع ًيا لعرض جميع المؤلفين الذين يحصلون على حق وقهم بنس بة ‪ %100‬ويعيش ون‬
‫في ألبرتا ‪ ،Alberta‬وذلك بإظهار الاسم الأول‪ ،‬واسم العائلة‪ ،‬والرمز البريدي‪ ،‬ثم احفظ ذل ك على أس اس‬
‫ع رض ‪ view‬بعن وان ‪ ،AuthorsView‬وبع دها أع د تس مية اس م عائل ة المؤل ف‪ ،‬واس مه الأول‬

‫بالصورة '‪ ،'Last Name‬و '‪ 'First Name‬عند إنشاء العرض‪.‬‬

‫‪ .4‬اعرض المتاجر ‪ stores‬التي لم ت ِبع الكتاب الذي عنوانه ?‪.Is Anger the Enemy‬‬
‫‪ .5‬اعرض قائم ًة بأسماء المتاجر للمبيع ات بع د ‪ ،2013‬حيث يك ون ت اريخ الطلب ‪ Order Date‬أك بر من‬

‫‪ ،2013‬وذلك بعرض اسم المتجر ‪ ،store name‬وتاريخ الطلب ‪.order date‬‬
‫‪ .6‬اعرض قائم ًة بعناوين الكتب المبا َع ة في المتج ر ال ذي اس مه ‪ ،News & Brews‬وذل ك بع رض اس م‬

‫المتجر‪ ،‬وعناوين الكتب‪ ،‬وتواريخ الطلب‪.‬‬
‫‪ .7‬اعرض قائم ًة بإجمالي المبيعات حسب العنوان‪ ،‬وذلك بعرض عمو َدي الكمية الإجمالية والعنوان‪.‬‬

‫‪ .8‬اعرض قائم ًة بإجمالي المبيعات حسب النوع‪ ،‬وذلك بعرض عمو َدي الكمية الإجمالية والنوع‪.‬‬
‫‪ .9‬اعرض قائم ًة بإجمالي المبيعات ‪ qty*price‬حسب النوع‪ ،‬وذلك بعرض عمو َدي إجمالي قيمة ال دولارات‬

‫والنوع‪.‬‬

‫‪ .10‬احسب العدد الكلي لأنواع الكتب لكل ناشر‪ ،‬وأظهر اسم الناشر‪ ،‬والعدد الإجمالي لأنواع الكتب لكل ناشر‬
‫على حدة‪.‬‬

‫‪ .11‬اعرض أسماء الناشرِين الذين ليس لديهم أ ّي نوع من الكتب‪ ،‬وذلك بعرض اسم الناشر فقط‪.‬‬

‫‪153‬‬

‫‪ .14‬الملحق أ‪ :‬مثال عملي عن تصميم‬

‫قاعدة بيانات لجامعة‬

‫فيما يلي متطلبات البيانات لمنتج من أجل دعم تسجيل وتق ديم المس اعدة لطلاب جامع ة تعليم إلك تروني‬
‫وهمية‪ .‬تحتاج جامعة تعليم إلكتروني إلى الاحتفاظ بتفاصيل طلابه ا وموظفيه ا‪ ،‬والمق ررات ال تي تق دمها وأداء‬

‫الطلاب الذين يدرسون فيها‪ .‬تدار الجامعة في أربع مناطق جغرافية (إنجلترا واسكتلندا وويلز وأيرلندا الشمالية)‪.‬‬
‫يجب تسجيل معلومات كل طالب في البداية عند التسجيل‪ ،‬ويتضمن ذلك رقم تعريف الطالب الصادر في‬
‫الوقت والاسم وسنة التسجيل والمنطقة الموجود فيها الطالب‪ .‬ليس الطالب ملز ًما بالتسجيل في أي مقرر عن د‬

‫التسجيل‪ ،‬فيمكنه التسجيل في مقررٍ ما في وق ٍت لاحق‪.‬‬
‫يجب أن تتضمن المعلومات المسجلة لكل عضو في القسم التعليمي وقسم الإرشاد رق َم الموظ ف والاس م‬
‫والمنطقة التي يوجد بها‪ .‬قد يعمل كل موظف كمرشد ‪ counselor‬لط ال ٍب أو أك ثر‪ ،‬وق د يعم ل كم درس ‪tutor‬‬
‫لطال ٍب أو أكثر في مقررٍ أو أكثر‪ .‬قد لا يُخ َّصص لأحد الموظفين أي طالب كمدرس أو كمرشد في أي وق ٍت معين‪.‬‬
‫يملك كل طالب مرش ًدا واح ًدا يخ َّصص ل ه عن د التس جيل‪ ،‬ويق ّدم ال دعم للط الب ط وال حيات ه الجامعي ة‪.‬‬
‫يُخ َّصص للطالب مدر ٌس منفص ٌل لكل مقرر سجّل فيه الطالب‪ .‬يُس َمح للموظف فقط العمل كمرشد أو كم د ّرس‬

‫لطال ٍب مقيم في نفس منطقته‪.‬‬
‫يجب أن يكون لكل مقرر متوفر للدراس ة رم ز مق رر وعن وان وقيم ة من حيث نق اط الائتم ان‪ ،‬حيث يك ون‬
‫للمقرر إما ‪ 15‬نقطة أو ‪ 30‬نقطة‪ .‬قد يكون للمقرر حص ة ‪ quota‬لع دد الطلاب المس جلين في ه في أي ع رض‪ .‬لا‬

‫يحتاج المقرر إلى أي طالب مسجل فيه (مثل المقرر الذي ُك ِتب للتو ثم ُعرِض للدراسة)‪.‬‬
‫يُق َّيد الطلاب في عدد المقررات التي يمكنهم التسجيل فيها في نفس الوقت‪ ،‬فقد لا يأخذون المق ررات في‬

‫نفس الوقت إذا تجاوز مجموع النقاط المد َمجة للمقررات المسجلين فيها ‪ 180‬نقطة‪.‬‬

‫تصميم قواعد البيانات‬ ‫الملحق أ‪ :‬مثال عملي عن تصميم قاعدة بيانات لجامعة‬

‫قد يكون للمقرر ذي العدد ‪ 15‬نقطة ما يصل إلى ثلاث وظائف لكل عرض‪ ،‬ويكون للمقرر ذي العدد ‪ 30‬نقطة‬
‫ما يصل إلى خمس وظائف لكل عرض‪ .‬تُسجَّل درجة الوظيفة في أي مقرر كعلام ٍة من ‪.100‬‬

‫قاعدة بيانات الجامعة التالية نموذج بيان ات محتم ل ي ِص ف مجموع ة المتطلب ات الم ذكورة أعلاه‪ .‬يحت وي‬
‫النموذج على عدة أجزاء‪ ،‬بد ًءا من مخطط ‪ ERD‬ووص ٌف لأنواع الكيانات والقيود والافتراضات‪.‬‬

‫‪ 14.1‬عملية التصميم‬

‫‪ .1‬الخطوة الأولى هي تحديد الن وى وال تي هي ع ادة أس ماء‪ :‬الم وظفين ‪ Staff‬والمق رر ‪ Course‬والط الب‬
‫‪ Student‬والوظيفة ‪.Assignment‬‬

‫‪ .2‬الخطوة التالية هي توثيق جميع السمات ‪ attributes‬لكل كيان ‪ .entity‬هذا هو المكان الذي تحتاج في ه‬
‫إلى التأكد من توحيد ‪ normalized‬جميع الجداول توحي ًدا صحيحًا‪.‬‬
‫‪ .3‬أنشئ مخطط ‪ ERD‬الأولي وراجعه مع المستخدمين‪.‬‬
‫‪ .4‬أجرِ تغييرات إن لزم الأمر بعد مراجعة مخطط ‪.ERD‬‬

‫‪ .5‬تحقق من نموذج ‪ ER‬مع المستخدمين لوضع اللمسات الأخيرة على التصميم‪.‬‬
‫يو ّضح الشكل التالي مخطط ‪ ERD‬للجامعة الذي يم ّثل نموذج بيانات لنظام سجلات الطلاب والموظفين‪:‬‬

‫‪155‬‬

‫تصميم قواعد البيانات‬ ‫الملحق أ‪ :‬مثال عملي عن تصميم قاعدة بيانات لجامعة‬

‫‪ 14.1.1‬الكيان ‪Entity‬‬

‫• )‪Student (StudentID, Name, Registered, Region, StaffNo‬‬
‫• )‪ :Staff (StaffNo, Name, Region‬يحتوي هذا الجدول على مد ّرسين وغيرهم من الموظفين‬

‫• )‪Course (CourseCode, Title, Credit, Quota, StaffNo‬‬
‫• )‪Enrollment (StudentlD, CourseCode, DateEnrolled, FinalGrade‬‬

‫• )‪Assignment (StudentID, CourseCode, AssignmentNo, Grade‬‬

‫‪ 14.1.2‬القيود ‪Constraints‬‬

‫• يجوز لأحد الموظفين أن يد ّرس أو يرشد الطلاب المتواجدين في نفس منطقتهم فقط‪.‬‬
‫• قد لا يسجّل الطلاب في مقررات لا تزيد قيمتها عن أكثر من ‪ 180‬نقطة في نفس الوقت‪.‬‬

‫• للسمة ‪( Credit‬ضمن المقرر ‪ )Course‬قيمة هي ‪ 15‬أو ‪ 30‬نقطة‪.‬‬
‫• قد يكون للمقرر الذي له ‪ 30‬نقطة ما يصل إلى خمس وظائف‪ ،‬بينما يكون للمقرر الذي ل ه ‪ 15‬نقط ة م ا‬

‫يصل إلى ثلاث وظائف‪.‬‬
‫• للسمة ‪( Grade‬ضمن الوظيفة ‪ )Assignment‬قيمة هي علامة من ‪.100‬‬

‫‪ 14.1.3‬الافتراضات ‪Assumptions‬‬

‫• يستطيع الطالب أن يسجّل مرة واحدة للمقرر حيث تُسجَّل عمليات التسجيل الحالية فقط‪.‬‬
‫• تُق َّدم الوظيفة مرة واحدة فقط‪.‬‬

‫‪ 14.1.4‬العلاقات ‪( Relationships‬تشمل عددية العلاقة ‪)cardinality‬‬

‫لاحظ في الشكل الآتي أن سجل الطالب مرتب ط م ع مق ررات ُمس جَّلة بح د أدنى مق رر واح د إلى مق ررات‬
‫متعددة كحد أقصى‪.‬‬

‫يجب أن يكون لكل تسجيل ‪ enrollment‬طالب صالح‪.‬‬

‫بما أن معرّف الطالب ‪ StudentID‬هو جزء من المفتاح الرئيسي ‪ ،PK‬فلا يمكن أن يكون فار ًغا ‪ ،null‬لذلك يجب‬
‫وجود معرّف طالب ‪ُ StudentID‬مد َخل في جدول الطالب مرة واحدة على الأقل كحد أقصى‪ ،‬لأن المفتاح الرئيسي‬

‫‪ PK‬يجب أاّل يتكرّر‪.‬‬

‫‪156‬‬

‫تصميم قواعد البيانات‬ ‫الملحق أ‪ :‬مثال عملي عن تصميم قاعدة بيانات لجامعة‬

‫يوضح الشكل الآتي ارتباط س جل الم وظفين (الم د ّرس هن ا) بح د أدنى ‪ 0‬ط الب وبطلاب متع ددين كح د‬
‫أقصى‪ .‬قد يكون لسجل الطالب مدر ٌس ‪ tutor‬أو قد يكون بدون مدرس‪.‬‬

‫يسمح الحقل ‪ StaffNo‬الموجود في جدول الطلاب ‪ Student‬بالقيم الفارغة التي تُم َّثل بالقيمة ‪ 0‬على الجانب‬
‫الأيسر من الشكل السابق‪ .‬لكن في حالة وجود الحقل ‪ StaffNo‬في جدول الطلاب ‪ ،Student‬فيجب أن يكون‬

‫موجو ًدا في جدول الموظفين ‪ Staff‬بحد أقصى مرة واحدة (ال ُمم َّثل بالقيمة ‪ 1‬في الشكل السابق)‪.‬‬
‫يرتبط سجل الموظفين ‪( Staff‬المد ّرس هنا) بعدد لا يق ل عن ‪ 0‬مق رّر كح د أدنى وبمق ررات متع ددة كح د‬

‫أقصى‪ .‬قد يكون المقرر ‪ course‬مرتب ًطا بمد ّرس ‪ instructor‬أو غير مرتبط بمدرس‪.‬‬
‫الحقل ‪ StaffNo‬الموجود في جدول ‪ Course‬هو المفتاح الخارجي ‪ FK‬الذي يمكن أن يكون فار ًغا‪ ،‬ويُم َّثل ذلك من‬

‫خلال القيمة ‪ 0‬على الجانب الأيسر من العلاقة في الشكل الآتي‪ .‬إذا احتوى الحقل ‪ StaffNo‬على بيانات‪ ،‬فيجب‬
‫أن يكون في جدول الموظفين ‪ Staff‬بحد أقصى مرة واحدة‪ ،‬ويُم َّثل ذلك بالقيمة ‪ 1‬على الجانب الأيسر من‬
‫العلاقة‪.‬‬

‫‪157‬‬

‫تصميم قواعد البيانات‬ ‫الملحق أ‪ :‬مثال عملي عن تصميم قاعدة بيانات لجامعة‬

‫يجب توفير المقرر (في عملية التسجيل ‪ )enrollment‬مرة واحدة على الأقل وم رات متع ددة كح د أقص ى‪.‬‬
‫يجب أن يحت وي ج دول التس جيل ‪ Enrollment‬على مق رر واح د ص الح على الأق ل إلى مق ررات متع ددة‬

‫كحد أقصى‪.‬‬

‫يمكن أن تحتوي عملية التسجيل على ‪ 0‬مهمة كحد أدنى أو مهام متعددة كحد أقصى‪.‬‬
‫يجب أن ترتبط الوظيفة ‪ assignment‬بتسجيل واحد على الأقل وبتسجي ٍل واحد كحد أقصى‪.‬‬
‫يجب أن يحتوي كل سجل في جدول الوظائف على سجل تسجيل صالح‪ ،‬ويمكن ربط سجل تسجيل واحد بمهام‬

‫متعددة‪.‬‬

‫‪158‬‬

‫‪ .15‬الملحق ب‪ :‬أمثلة عملية عن إنشاء‬
‫مخططات ‪ERD‬‬

‫‪ 15.1‬التمرين الأول‪ :‬شركة تصنيع ‪Manufacturer‬‬

‫تنتج شركة تصنيع منتجات‪ ،‬وتخزّن معلومات المنتج التالية‪ :‬اس م المنتج ‪ product name‬ومع رّف المنتج‬
‫‪ product name‬والكمية المتوفرة ‪ .quantity‬تتكون هذه المنتجات من مكونات متعددة‪ ،‬ويو ّفر م ِّور ٌد أو أكثر ك َّل‬
‫مك ون‪ .‬تُح َف ظ معلوم ات المك ّون التالي ة‪ :‬مع رّف المك ون ‪ component ID‬واس مه ‪ name‬ووص ف عن ه‬
‫‪ description‬الم ّوردون ‪ suppliers‬الذين يوفرونه والمنتجات ‪ products‬ال تي تس تخدم ه ذا المك ّون (اس تخدم‬

‫الشكل الآتي لحل هذا التمرين)‪.‬‬
‫‪ .1‬أن ِشئ مخطط ‪ ERD‬لإظهار كيفية تتبع هذه المعلومات‪.‬‬
‫‪ .2‬اعرض أسماء الكيانات ‪ entity names‬والمف اتيح الرئيس ية ‪ primary keys‬وس مات ‪ attributes‬ك ل‬
‫كيان والعلاقات بين الكيانات وعددية العلاقة ‪.cardinality‬‬

‫‪ 15.1.1‬الافتراضات ‪Assumptions‬‬

‫• يمكن وجود الم ّورد دون أن يو ّفر مكونات‪.‬‬
‫• ليس واج ًبا أن يرتبط مكو ٌن بم ّورد‪.‬‬

‫• ليس واج ًبا أن يرتبط مك ّو ٌن مع منتج‪ ،‬فليست جميع المكونات مستخد َم ًة في المنتجات‪.‬‬
‫• لا يمكن أن يوجد منتج بدون مكونات‪.‬‬

‫تصميم قواعد البيانات‬ ‫الملحق ب‪ :‬أمثلة عملية عن إنشاء مخططات ‪ERD‬‬

‫‪ 15.1.2‬جواب مخطط ‪ERD‬‬

‫‪- Component(CompID, CompName, Description) PK=CompID‬‬
‫‪- Product(ProdID, ProdName, QtyOnHand) PK=ProdID‬‬
‫‪- Supplier(SuppID, SuppName) PK = SuppID‬‬
‫‪- CompSupp(CompID, SuppID) PK = CompID, SuppID‬‬
‫‪- Build(CompID, ProdID, QtyOfComp) PK= CompID, ProdID‬‬

‫‪ 15.2‬التمرين الثاني‪ :‬وكيل سيارات ‪Car Dealership‬‬

‫أنشئ مخطط ‪ ERD‬لوكيل سيارات‪ ،‬حيث يبيع هذا الوكيل كاًل من السيارات الجديدة والمس تعملة‪ ،‬ويش ّغل‬
‫قس ًما للخدمات‪ .‬اب ِن تصميمك على قواعد الأعمال التالية‪:‬‬

‫• قد يبيع من دوب المبيع ات ‪ salesperson‬س يارات متع ددة‪ ،‬ولكن تُب اع ك ل س يارة بواس طة من دوب‬
‫مبيعات واحد فقط‪.‬‬

‫• يمكن أن يش تري العمي ل ‪ customer‬س يارات متع ددة‪ ،‬ولكن تُش ترى ك ل س يارة بواس طة عميل‬
‫واحد فقط‪.‬‬

‫• يكتب مندوب المبيعات فاتور ًة ‪ invoice‬واحدة لكل سيارة يبيعها‪.‬‬
‫• يحصل العميل على فاتورة لكل سيارة يشتريها‪.‬‬

‫• قد يأتي العميل من أجل الحصول على خدما ٍت لسيارته فقط‪ ،‬وهذا يعني أن العميل لا يحتاج إلى ش راء‬
‫سيارة لكي يُص َّنف كعميل‪.‬‬

‫‪160‬‬

‫تصميم قواعد البيانات‬ ‫الملحق ب‪ :‬أمثلة عملية عن إنشاء مخططات ‪ERD‬‬

‫• إذا جلب العميل سيار ًة أو أكثر لإصلاحها أو للحصول على خدمة‪ ،‬فس ُتك َتب تذكرة خدمة ‪service ticket‬‬
‫لكل سيارة‪.‬‬

‫• يحتفظ وكيل السيارات بتاريخ خدمة لكل من السيارات ال ُمخ َّدمة‪ ،‬ويُشار إلى سجلات الخدمة عن طري ق‬
‫رقم السيارة التسلسلي‪.‬‬

‫• يمكن أن يعمل على السيارة التي تُجلَب للحصول على خدم ة ميك انيكيون متع ددون‪ ،‬وق د يعم ل ك ل‬
‫ميكانيكي على سيارات متعددة‪.‬‬

‫• قد تحتاج السيارة التي تحصل على خدمة إلى ِقطع أو قد لا تحتاج إلى قطع (مث ل عملي ة ض بط المفحّم‬
‫‪ carburetor‬أو تنظيف فوهة حاقن الوقود التي لا تتطلب توفير ِقط ٍع جديدة)‪.‬‬

‫‪ 15.2.1‬جواب مخطط ‪ERD‬‬

‫‪161‬‬

‫‪ .16‬الملحق ج‪ :‬حل تمرين باستخدام لغة‬
‫‪SQL‬‬

‫نزّل السكريبت التالي‪.OrdersAndData.sql :‬‬

‫‪ 16.1‬الجزء الأول‪ :‬استخدم لغة ‪DDL‬‬

‫اس تخدم الس كريبت ‪ orderData.sql‬ال ذي ينش ئ ج داول ويض يف بيان ات مخط ط ‪ ERD‬للطلب ات‬
‫والبيانات في الشكل السابق‪.‬‬

‫تصميم قواعد البيانات‬ SQL ‫ حل تمرين باستخدام لغة‬:‫الملحق ج‬

‫ والس لامة المرجعي ة‬PK ‫ وع ّدل السكريبت لدمج المفتاح الرئيس ي‬،Orders ‫أنشئ قاعدة بيانات تس ّمى‬ .1
‫ مع التعديلات بما في ذلك القيود الموجودة‬CREATE TABLE ‫ استخدم عبارات‬.referential integrity

.3 ‫في الخطوة‬

:‫ أضف القيود التالية‬.2

)‫ قيمته الافتراضية هي‬Canada( tblCustomers table: Country ◦

tblOrderDetails: Quantity – > 0 ◦

)‫ (يجب أن يكون فري ًدا‬tblShippers: CompanyName ◦

)‫ يجب أن يكون أكبر تاريخ الطلب‬order date( tblOrders: ShippedDate ◦

CREATE DATABASE Orders

Go

Use Orders

Go

Use Orders

Go

CREATE TABLE [dbo].[tblCustomers]

[CustomerID] nvarchar(5) NOT NULL,

[CompanyName] nvarchar(40) NOT NULL,

[ContactName] nvarchar(30) NULL,

[ContactTitle] nvarchar(30) NULL,

[Address] nvarchar(60) NULL,

[City] nvarchar(15) NULL,

[Region] nvarchar(15) NULL,

[PostalCode] nvarchar(10) NULL,

[Country] nvarchar(15) NULL

Constraint df_country DEFAULT 'Canada',

[Phone] nvarchar(24) NULL,

[Fax] nvarchar(24) NULL,

Primary Key (CustomerID)

);

CREATE TABLE [dbo].[tblSupplier] (

[SupplierID] int NOT NULL,

[Name] nvarchar(50) NULL,

[Address] nvarchar(50) NULL,

163

‫تصميم قواعد البيانات‬ SQL ‫ حل تمرين باستخدام لغة‬:‫الملحق ج‬

[City] nvarchar(50) NULL,

[Province] nvarchar(50) NULL,

Primary Key (SupplierID)

);

CREATE TABLE [dbo].[tblShippers] (

[ShipperID] int NOT NULL,

[CompanyName] nvarchar(40) NOT NULL,

Primary Key (ShipperID),<

CONSTRAINT uc_CompanyName UNIQUE (CompanyName)

);

CREATE TABLE [dbo].[tblProducts] (

[ProductID] int NOT NULL,

[SupplierID] int NULL,

[CategoryID] int NULL,

[ProductName] nvarchar(40) NOT NULL,

[EnglishName] nvarchar(40) NULL,

[QuantityPerUnit] nvarchar(20) NULL,

[UnitPrice] money NULL,

[UnitsInStock] smallint NULL,

[UnitsOnOrder] smallint NULL,

[ReorderLevel] smallint NULL,

[Discontinued] bit NOT NULL,

Primary Key (ProductID),

Foreign Key (SupplierID) References tblSupplier

);

CREATE TABLE [dbo].[tblOrders] (

[OrderID] int NOT NULL,

[CustomerID] nvarchar(5) NOT NULL,

[EmployeeID] int NULL,

[ShipName] nvarchar(40) NULL,

[ShipAddress] nvarchar(60) NULL,

[ShipCity] nvarchar(15) NULL,

[ShipRegion] nvarchar(15) NULL,

[ShipPostalCode] nvarchar(10) NULL,

[ShipCountry] nvarchar(15) NULL,

[ShipVia] int NULL,

164

‫تصميم قواعد البيانات‬ SQL ‫ حل تمرين باستخدام لغة‬:‫الملحق ج‬

[OrderDate] smalldatetime NULL,

[RequiredDate] smalldatetime NULL,

[ShippedDate] smalldatetime NULL,

[Freight] money NULL

Primary Key (OrderID),

Foreign Key (CustomerID) References tblCustomers,

Foreign Key (ShipVia) References tblShippers,

Constraint valid_ShipDate CHECK (ShippedDate > OrderDate)

);

CREATE TABLE [dbo].[tblOrderDetails] (

[OrderID] int NOT NULL,

[ProductID] int NOT NULL,

[UnitPrice] money NOT NULL,

[Quantity] smallint NOT NULL,

[Discount] real NOT NULL,

Primary Key (OrderID, ProductID),

Foreign Key (OrderID) References tblOrders,

Foreign Key (ProductID) References tblProducts,

Constraint Valid_Qty Check (Quantity > 0)

);

Go

SQL ‫ إنشاء عبارات لغة‬:‫ الجزء الثاني‬16.2

customer ID ‫ أظهر الحقول‬.2014 ‫ ال ُمن َشأة خلال عام‬orders ‫ والطلبات‬customers ‫اعرض قائمة العملاء‬
.date ordered ‫ و‬order date ‫ و‬order ID ‫و‬

Use Orders
Go
SELECT CompanyName, OrderID, RequiredDate as 'order date', OrderDate
as 'date ordered'
FROM tblcustomers JOIN tblOrders on tblOrders.CustomerID =
tblCustomers.CustomerID
WHERE Year(OrderDate) = 2014

‫ حيث تك ون قيمت ه‬،ALTER TABLE ‫ باستخدام عبارة‬tblCustomer ‫أضف حقاًل جدي ًدا (نش ًطا) في جدول‬
.True ‫الافتراضية‬

165

‫تصميم قواعد البيانات‬ SQL ‫ حل تمرين باستخدام لغة‬:‫الملحق ج‬

ALTER TABLE tblCustomers
ADD Active bit DEFAULT ('True')

company name ‫ (اع رض الحق ول‬2012 ‫ س بتمبر‬1 ‫اع رض جمي ع الطلب ات ال تي ج رى ش راؤها قب ل‬
.)freight ‫ وكلفة الطلب الإجمالية (بما في ذلك تكلفة الشحن‬date ordered ‫و‬

SELECT tblOrders.OrderID, OrderDate as 'Date Ordered',
sum(unitprice*quantity*(1-discount))+ freight as 'Total Cost'
FROM tblOrderDetails join tblOrders on tblOrders.orderID =
tblOrderDetails.OrderID
WHERE OrderDate < 'September 1, 2012'
GROUP BY tblOrders.OrderID, freight, OrderDate

ShipName ‫ و‬OrderID ‫ (اع رض الحق ول‬Federal Shipping ‫اعرض جميع الطلبات المشحونة عبر شركة‬

.)CustomerID ‫ و‬ShipAddress ‫و‬

SELECT OrderID, ShipName, ShipAddress, CustomerID
FROM tblOrders join tblShippers on tblOrders.ShipVia =
tblShippers.ShipperID
WHERE CompanyName= 'Federal Shipping'

.2011 ‫اعرض جميع العملاء الذين لم يشتروا في عام‬

SELECT CompanyName
FROM tblCustomers
WHERE CustomerID not in
( SELECT CustomerID
FROM tblOrders
WHERE Year(OrderDate) = 2011
)

.‫اعرض جميع المنتجات التي لم تُطلَب أب ًدا‬

SELECT ProductID from tblProducts
Except
SELECT ProductID from tblOrderDetails

166

‫تصميم قواعد البيانات‬ SQL ‫ حل تمرين باستخدام لغة‬:‫الملحق ج‬

:‫أو يمكن حل ذلك بالشكل التالي‬

SELECT Products.ProductID,Products.ProductName
FROM Products LEFT JOIN [Order Details]
ON Products.ProductID = [Order Details].ProductID
WHERE [Order Details].OrderID IS NULL

‫ للزب ائن ال ذين يقيم ون في لن دن باس تخدام اس تعلام ف رعي (اع رض‬OrderID ‫اعرض معرّف ات الطلب ات‬
.)OrderID ‫ و‬CustomerName ‫ و‬CustomerID ‫الحقول‬

SELECT Customers.CompanyName,Customers.CustomerID,OrderID
FROM Orders
LEFT JOIN Customers ON Orders.CustomerID = Customers.CustomerID
WHERE Customers.CompanyName IN
(SELECT CompanyName
FROM Customers
WHERE City = 'London')

.)supplier name ‫ و‬product name ‫ (اعرض الحقول‬B ‫ والم ّورد‬A ‫اعرض المنتجات التي يو ّفرها الم ّورد‬

SELECT ProductName, Name
FROM tblProducts JOIN tblSupplier on tblProducts.SupplierID =
tblSupplier.SupplierID
WHERE Name Like 'Supplier A' or Name Like 'Supplier B'

.)QuantityPerUnit ‫ و‬product name ‫اعرض جميع المنتجات التي تأتي ضمن صناديق (اعرض الحقول‬

SELECT EnglishName, ProductName, QuantityPerUnit
FROM tblProducts
WHERE QuantityPerUnit like '%box%'
ORDER BY EnglishName

‫ الإدخال والتعديل والحذف والفهارس‬:‫ الجزء الثالث‬16.3

EmployeeID ‫ يجب أن يكون المفتاح الرئيس ي ه و مع رّف الموظ ف‬.Employee ‫أنشئ جدول الموظفين‬
:‫ أضف الحقول التالية‬.autonumber ‫وهو حقل ترقيم تلقائي‬

LastName •

FirstName •

167

‫تصميم قواعد البيانات‬ SQL ‫ حل تمرين باستخدام لغة‬:‫الملحق ج‬

Address •

City •

Province •

Postalcode •

Phone •

Salary •

‫ ض م ج دول‬.‫ خمس ة م وظفين‬INSERT ‫ وعب ارات إدخ ال‬CREATE TABLE ‫استخدم عبارة إنش اء ج دول‬
‫ اع رض الس كريبت لإنش اء الج دول وإع داد القي ود‬.Tblorders ‫ إلى الج دول‬employee ‫الم وظفين‬

.‫وإضافة الموظفين‬

Use Orders
CREATE TABLE [dbo].[tblEmployee](
EmployeeID Int IDENTITY NOT NULL ,
FirstName varchar (20) NOT NULL,
LastName varchar (20) NOT NULL,
Address varchar (50),
City varchar(20), Province varchar (50),
PostalCode char(6),
Phone char (10),
Salary Money NOT NULL,
Primary Key (EmployeeID)
Go
INSERT into tblEmployees
Values ('Jim', 'Smith', '123 Fake', 'Terrace', 'BC', 'V8G5J6',
'2506155989', '20.12'),
('Jimmy', 'Smithy', '124 Fake', 'Terrace', 'BC', 'V8G5J7',
'2506155984', '21.12'),
('John', 'Smore', '13 Fake', 'Terrace', 'BC', 'V4G5J6', '2506115989',
'19.12'),
('Jay', 'Sith', '12 Fake', 'Terrace', 'BC', 'V8G4J6', '2506155939',
'25.12'),
('Jig', 'Mith', '23 Fake', 'Terrace', 'BC', 'V8G5J5', '2506455989',
'18.12');
Go

168

‫تصميم قواعد البيانات‬ SQL ‫ حل تمرين باستخدام لغة‬:‫الملحق ج‬

.ALTER TABLE ‫ وعبارة‬DDL ‫ استخدم تعليمات لغة‬.Tblorders ‫ إلى جدول‬Totalsales ‫أضف حقاًل يس ّمى‬

ALTER TABLE tblOrders
ADD Foreign Key (EmployeeID) references tblEmployees (EmployeeID)

.order details ‫ لإضافة مجموع مبيعات كل طلب بنا ًء على جدول‬UPDATE ‫استخدم عبارة‬

UPDATE tblOrders
Set TotalSales = (select sum(unitprice*quantity*(1-discount))
FROM tblOrderDetails
WHERE tblOrderDetails.OrderID= tblOrders.OrderID
GROUP BY OrderID

169

‫من إصدارات أكاديمية حسوب‬


Click to View FlipBook Version