تصميم قواعد البيانات فهم عملية التوحيد Normalization
• :FDالاعتمادية الكاملة ،full dependencyإذ يشير الاختصار FDإلى الاعتمادية الوظيفي ة functional
dependencyع اد ًة ،ولكن اس تخدمنا الاختص ار FDعلى أس اس اختص ار للاعتمادية
الكاملة full dependencyفي الشكل السابق فقط.
10.6نموذج بويس-كود المو َّحد BCNF
قد تنتج حالات شاذة عندما يحتوي الجدول على أكثر من مفتاح مر َّش ح candidate keyعلى ال رغم من أن
العلاق ة بص يغة نم وذج ،3NFحيث يُ َع ّد نم وذج ب ويس-ك ود الموحَّد Boyce-Codd normal formأو BCNF
اختص ا ًرا حال ًة خاص ًة من النم وذج ،3NFوتك ون العلاق ة ض من نم وذج BCNFإذا وفق ط إذا ك ان ك ل مح ّدد
determinantمفتا ًحا مر َشحًا .candidate key
10.6.1المثال الأول عن نموذج BCNF
ضع في بالك الجدول التالي :St_Maj_Adv
Advisor Major Student_id
111
Smith Physics 111
Chan Music 320
Dobbs Math 671
White Physics 803
Smith Physics
القواعد الدلالية - semantic rulesأي قواعد العمل المط َّبقة على قاعدة البيانات -لهذا الجدول هي:
.1يجوز لكل طالب Studentالتخصص في عدة مواد.
.2يكون لكل طالب معين مدرِّ ًسا واح ًدا فقط لكل تخصص .Major
.3لكل تخصص عدة مدرِّسين.
.4يدرِّس كل مدرِّس تخص ًصا واح ًدا فقط.
.5يدرِّس كل مدرِّس عدة طلاب في تخصص واحد.
الاعتماديات الوظيفية له ذا الج دول م ذكورة أدن اه ،ف الأولى هي مفت اح مر َّش ح ،candidate keyوالثاني ة
ليست كذلك.
Student_id, Major ——> Advisor
Advisor ——> Major
101
تصميم قواعد البيانات Normalization فهم عملية التوحيد
:تشمل الحالات الشاذة لهذا الجدول ما يلي
. مثل حالة حذف الطالب معلومات المدرِّس:Delete الحذف.1
. مثل حالة احتياج المدرِّس الجديد إلى وجود طالب:Insert الإدخال.2
. مثل الحالات المتناقضة:Update التحديث.3
. مفتا ًحا مر َشحًاsingle attribute ليست السمة ال ُمف َردة
ويمكن ك إنش اء،Student_id, Advisor أو،Student_id, Major هوPK يمكن أن يكون المفتاح الرئيسي
: كما يليBCNF إلى النموذجSt_Maj_Adv لتقليل العلاقة،جدولين جديدين
St_Adv (Student_id, Advisor)
Adv_Maj (Advisor, Major)
:St_Adv • جدول
Advisor Student_id
111
Smith 111
Chan 320
Dobbs 671
White 803
Smith
:Adv_Maj • جدول
Major Advisor
Physics Smith
Music Chan
Math Dobbs
Physics White
BCNF المثال الثاني عن نموذج10.6.2
:Client_Interview انظر الجدول التالي
RoomNo StaffNo InterviewTime InterviewDate ClientNo
G101 SG5
G101 SG5 10.30 13-May-02 CR76
G102 SG37
12.00 13-May-02 CR56
12.00 13-May-02 CR74
102
تصميم قواعد البيانات فهم عملية التوحيد Normalization
G102 SG5 10.30 1-July-02 CR56
)FD1 – ClientNo, InterviewDate –> InterviewTime, StaffNo, RoomNo (PK
FD2 – staffNo, interviewDate, interviewTime –> clientNO
)(candidate key: CK
FD3 – roomNo, interviewDate, interviewTime –> staffNo, clientNo
)(CK
FD4 – staffNo, interviewDate –> roomNo
تكون العلاقة بصيغة نموذج BCNFإذا وفقط إذا كان كل مح ّدد determinantمفتاحًا مر َّشحًا.
نحن بحاجة إلى إنش اء ج دول يتض من أول ثلاث ة اعتمادي ات كامل ة - FDأي ج دول ،-Client_Interview2
وإنشاء جدول آخر -أي جدول -StaffRoomللاعتمادية الكاملة FDالرابعة.
• جدول :Client_Interview2
ClientNo InterviewDate InterViewTime StaffNo
CR76 13-May-02 10.30 SG5
CR56 13-May-02 12.00 SG5
CR74 13-May-02 12.00 SG37
CR56 1-July-02 10.30 SG5
• جدول :StaffRoom
RoomNo StaffNo StaffNo
13-May-02
G101 13-May-02 SG5
G102 1-July-02 SG37
G102 SG5
10.7التوحيد وتصميم قواعد البيانات
تأ َّكد أثناء عملية توحيد تصميم قاعدة البيانات من توافق الكيانات المقترحة للنموذج الموحَّد المطلوب قب ل
إنشاء بُنى الجدول.
ُص ِّممت العديد من قواعد البيانات واقع ًيا بصورة غير س ليمة ،أو ُأث ِق ل كاهله ا بح الات ش اذة عن د تع ديلها
بصورة غير سليمة خلال فترة زمنية.
103
تصميم قواعد البيانات فهم عملية التوحيد Normalization
قد يُطلب منك إعادة تصميم قواعد البيانات الحالية ،وتع ديلها ،كم ا يمكن أن يك ون ذل ك مهم ًة كب ير ًة إذا
أجريت عملية التوحيد على الجداول بصور ٍة غير صحيحة.
10.8المصطلحات الأساسية والاختصارات
• نموذج بويس-كود المو َّحد Boyce-Codd normal formأو :BCNFوه و حال ة خاص ة من نم وذج
.3NF
• النموذج الموحَّد الأول first normal formأو :1NFيُسمح بقيم غير مك ررة فق ط عن د تق اطع ك ل
صف وعمود ،لذلك لا توجد مجموعات مكرَّرة.
• التوحيد :normalizationعملية تحديد مقدار التكرار الموجود في الجدول.
• النموذج الموحَّد الثاني second normal formأو :2NFيجب أن يكون للعلاقة صيغة نموذج ،1NF
كما يجب اشتمال المفتاح الرئيسي PKعلى سم ٍة واحدة.
• القواعد الدلالية :semantic rulesقواعد العمل المط َّبقة على قاعدة البيانات.
• النموذج المو َّحد الثالث third normal formأو :3NFيجب أن يكون للعلاقة ص يغة نم وذج ،2NF
كما يجب إزالة جميع الاعتماديات المتع ِّدي ة ،transitive dependenciesفق د لا تعتم د الس مة ال تي
ليست مفتا ًحا non-key attributeاعتما ًدا وظيف ًيا على سمة أخرى ليست مفتاحًا أي ًضا.
10.9تمارين
.1ما هو التوحيد normalization؟
.2متى يكون جدول ما في نموذج 1NF؟
.3متى يكون جدول ما في نموذج 2NF؟
.4متى يكون جدول ما في نموذج 3NF؟
.5عرِّف وناقش كل من الاعتماديات المشار إليها في مخطط الاعتمادية المو َّضح في الشكل التالي:
104
تصميم قواعد البيانات فهم عملية التوحيد Normalization
.6تستخدم كل ّية جامعية collegeجديدة بنية الجدول المو َّضحة في الج دول الت الي ،وذل ك لتتب ع الطلاب
والمقرَّرات ،وبالتالي ،ارسم مخطط الاعتمادية لهذا الجدول.
Attribute Name Sample Value Sample Value Sample Value
2 3
StudentID 1 Sandy Law Sue Rogers
2 3
StudentName John Smith Programming Level 1 Business
61% 81%
CourselD 2 Jan 5th, 2014 Jan 7th, 2014
CourseName Programming Level 1
Grade 75%
CourseDate Jan 5th, 2014
.7اع رض الج داول بص يغة النم وذج الموحَّد الث الث ال تي ستنش ئها لإص لاح المش كلات ال تي واجهته ا
باستخدام مخطط الاعتمادية الذي رسمته للتو ،ثم ارسم مخطط الاعتمادية للجدول الثابت.
.8توفر الوكالة التي تس مى Instant Coverم وظ ِفين ب دوام ج زئي أو م ؤقت للفن ادق في اس كتلندا ،إذ
يو ِّضح الشكل الآتي الوقت الذي يقضيه موظفو الوكالة في العمل في فنادق مختلف ة ،حيث يك ون رقم
التأمين الوطني - NINأي -national insurance numberفري ًدا لكل موظف.
استخدم الجدول التالي للإجابة على السؤالين الآتيين:
NIN ContractNo Hours eName hNo hLoc
1135 Smith J. H25 East Killbride
C1024 16
1057 C1024 24 Hocine D. H25 East Killbride
1068 C1025 28 White T. H4 Glasgow
1135 C1025 15 Smith J. H4 Glasgow
.1هذا الج دول عرض ة لح الات تح ديث ش اذة ل ذا ق ّدم أمثل ًة على ح الات ش اذة للإدخ ال والح ذف
والتحديث.
َ .2ط ّبق عملية التوحيد على هذا الجدول ليصبح له صيغة النموذج الموحّد الثالث ،م ع التأك د من ذك ر
أي افتراضات.
.9املأ الفراغات:
◦ ينتج عن ______ نموذجًا موحّ ًدا أقل.
◦ تسمى السمة التي تح ِّدد قيمتها قي ًما أخرى داخل صف ______.
◦ السمة التي لا يمكن تقسيمها توصف بأنها ______.
105
تصميم قواعد البيانات فهم عملية التوحيد Normalization
◦ يشير _______ إلى مستوى التفاصيل الذي تم ِّثله القيم المخزَّنة في صف الجدول.
◦ يجب ألا يحتوي الجدول العلائقي على مجموعات ________.
106
.11عملية تطوير قواعد البيانات
يتمثل أحد الجوانب الأساسية لهندسة البرمجي ات في تقس يم عملي ة التط وير إلى سلس لة من المراح ل أو
الخطوات ،حيث تر ِّكز كل مرحلة منها على جانب واحد من جوانب التطوير.
يشار أحيانًا إلى مجموعة هذه الخطوات بدورة حياة تطوير البرمجيات - software development life cycle
أو SDLCاختصا ًرا ،حيث ينتقل المنتج البرمجي عبر مراحل دورة الحياة ه ذه -في بعض الأحي ان بص ورة متك ررة
أثناء ضبطه أو إعادة تطويره -حتى يتوقف استخدامه في النهاية ،كما يمكن التحقق من كل مرحلة في دورة الحياة
للتأكد من صحتها قبل الانتقال إلى المرحلة التالية في الحالة المثالية.
11.1دورة حياة تطوير البرمجيات -نموذج الشلال Waterfall
لنبدأ بإلقاء نظرة عامة على نموذج الشلال waterfall modelالذي هو أحد نماذج تمثي ل دورة حي اة عملي ة
تطوير البرمجيات Software Development Life Cycleكما ستجده في معظم كتب هندسة البرمجيات.
يوضح هذا الشكل الشلالي الموجود في الشكل الآتي نموذج شلال عام يمكن تطبيقه على أية عملي ة تط وير
لنظام حاسوبي ،حيث يُظ ِهر هذا النموذج العملية على أساس تسلسل صارم من الخطوات بأن يكون خ رج خط وة
واحدة دخاًل للخطوة التالية ،كما يجب إكمال كل خطوة قبل الانتقال إلى الخطوة التالية.
تصميم قواعد البيانات عملية تطوير قواعد البيانات
يمكننا استخدام عملية نم وذج الش لال على أس اس وس يلة لتحدي د المه ام المطلوب ة م ع دخ ل وخ رج كل
نشاط ،activityإذ المهم هنا هو مجالات الأنشطة التي يمكن تلخيصها على النحو التالي:
• تتض من مرحل ة إنشاء المتطلبWات Establishing requirementsالتش اور والاتف اق م ع أص حاب
المصلحة حول ما يريدونه ويحتاجون إلي ه من النظ ام ،وال تي يُع َّبر عنه ا بم ا يس َّمى وثيق ة المتطلب ات
وباللغة الإنجليزية .statement of requirements
108
تصميم قواعد البيانات عملية تطوير قواعد البيانات
تبدأ مرحلة التحليل Analysisبالنظر في وثيقة المتطلب ات وتنتهي من خلال إنت اج مواص فات النظ ام •
،system specificationحيث تُ َع ّد المواصفات تمثياًل رسم ًيا لما يجب على النظ ام فعل ه ،ويُع َّبر عنه ا
بعبارات مستقلة عن كيفية تطبيقها.
• تبدأ مرحلة التصميم Designبمواصفات النظام وينتج عنها وثائق التصميم ،كم ا تق ِّدم ه ذه المرحل ة
وص ًفا تفصيل ًيا لكيفية بناء النظام.
• مرحلة التطبيق Implementationهي بناء نظام حاسوبي وف ًقا لوثيقة تصميم معينة مع مراعاة البيئة
التي سيعمل فيها النظام ،مثل العتاد ،والبرمجيات المتاحة للتطوير؛ كما ق د تُن َّفذ مرحل ة التط بيق على
مراحل باستخدام نظام أولي يمكن التحقق من صحته واختباره قبل إصدار النظام النهائي للاستخدام.
• توازن مرحلة الاختبار Testingالنظام ال ُمط َّبق مع وثائق التصميم ومواصفات المتطلب ات ،وتنتج ه ذه
المرحلة تقرير قبول ،أو قائم ًة بالأخطاء والزلات البرمجية bugsالتي تتطلب مراجع ة عملي ات التحلي ل،
والتصميم ،والتطبيق لتصحيحها ،أي تُ َع ّد مرحل ة الاختب ار ع اد ًة ال َمهم ة ال تي ت ؤدي إلى تك رار نم وذج
الشلال خلال دورة الحياة.
• تتضمن مرحلة الصيانة Maintenanceالتعامل مع تغ يرات المتطلب ات ،أو بيئ ة التط بيق ،أو إص لاح
الزلات البرمجية ،أو نقل النظام إلى بيئات جديدة مثل ترحيل نظام من حاسوب مستقل إلى محطة عمل
يونكس أو بيئة متصلة بالشبكة ،كما سيعاد النظر في دورة حياة الش لال بص ورة متك ررة بس بب احت واء
مرحلة الصيانة على تحليل التغيرات المطلوبة ،وتصميم حل ،وتطبيق ه ،واختب اره على م دى حي اة نظ ام
برمجي جرت صيانته.
11.2دورة حياة قاعدة البيانات Database Life Cycle
نس تطيع اس تخدام دورة الش لال مث ل أس اس لنم وذج تط وير قاع دة البيان ات ال ذي يتض من ثلاثة
افتراضات هي:
.1يمكننا فصل تطوير قاعدة البيانات عن عمليات المس تخدم ال تي تس تخدم قاع دة البيان ات ،أي تحدي د
وإنشاء تخطيط schemaلتعريف البيانات في قاعدة البيانات.
.2يمكنن ا اس تخدام معماري ة التخطيط ات الثلاث ة three-schema architectureمث ل أس اس لتمي يز
الأنشطة المرتبطة بالتخطيط.
.3يمكننا تمثيل القيود constraintsلفرض دلالات semanticsالبيانات م ر ًة واح د ًة في قاع دة البيان ات
عو ًضا عن فرضها على كل عملية مستخ ِدم تستخ ِدم البيانات.
109
تصميم قواعد البيانات عملية تطوير قواعد البيانات
يمكننا باستخدام هذه الافتراضات والشكل السابق رؤية أ ّن ه ذا المخط ط يم ِّثل نموذجً ا للأنش طة وخرجه ا
لتطوير قاعدة البيانات ،فهذا المخطط ليس قاباًل للتطبيق على النهج العلائقي فقط وإنم ا يُط َّبق على أي ة ص نف
classمن نظم إدارة قواعد البيانات DBMSأي ًضا.
يُ َع ّد تطوير تطبيقات قواعد البيانات عملي ًة للحص ول على متطلب ات الع الم الحقيقي ،real-worldوتحلي ل
المتطلبات ،وتصميم البيانات ووظائف النظام ،ثم تطبيق العمليات في النظام.
110
تصميم قواعد البيانات عملية تطوير قواعد البيانات
11.3جمع المتطلبات Requirements Gathering
تُ َع ّد مرحل ة جم ع المتطلب ات requirements gatheringالخط وة الأولى في نم وذج الش لال ،ويجب على
مصممي قاعدة البيانات خلال هذه الخط وة إج راء مق ابلات م ع العملاء -أي مس تخدمي قاع دة البيان ات -لفهم
النظام المقترح والحصول على البيانات والمتطلبات الوظيفية ،وتوثيقها ،كم ا تك ون نتيج ة ه ذه الخط وة وثيق ًة
تتضمن المتطلبات التفصيلية التي قدمها المستخ ِدمون.
تتضمن مرحلة إنشاء المتطلبات Establishing requirementsالتشاور والاتفاق بين جميع المس تخ ِدمين
بشأن البيان ات الثابت ة persistent dataال تي يرغب ون في تخزينه ا م ع الاتف اق على مع نى عناص ر البيان ات
وتفسيرها ،كما يلعب مسؤول البيانات دو ًرا رئيس ًيا في هذه العملية لأنه يستعرِض القضايا التجارية ،والقانوني ة،
والأخلاقية داخل المؤسسة التي تؤثِّر على متطلبات البيانات.
تُس تخ َدم وثيق ة متطلب ات البيان ات data requirements documentلتأكي د فهم المتطلب ات م ع
المستخ ِدمين ،فلا ينبغي أن تكون رسمي ًة أو مشفر ًة بمستوى عا ٍل لضمان سهولة فهمها.
يجب أن تق ِّدم هذه الوثيق ة ملخ ًص ا م وجزًا لمتطلب ات جمي ع المس تخ ِدمين -أي ليس مج رد مجموع ة من
الأفراد فقط ،-وذلك لأ ّن الهدف هو تطوير قاعدة بيانات مشتركة واحدة.
يجب ألا ت ِصف المتطلبات كيفية معالجة البيانات ،بل تصف عناصر البيانات ،وال ِس مات attributesال تي
تمتلكها ،والقيود المط َّبقة ،والعلاقات التي تربط بين عناصر البيانات.
11.4التحليل Analysis
تب دأ مرحل ة تحلي ل البيان ات Data analysisبوثيق ة متطلب ات البيان ات ،ثم ينتج عنه ا نم وذج بيان ات
مفاهيمي .conceptual data modelالهدف من التحليل ه و الحص ول على وص ف تفص يلي للبيان ات ال تي
ستناسب متطلبات المستخ ِدم ،بحيث يجري التعامل مع خصائص البيانات ذات المس توى الع الي والمنخفض
واستخدامها .تتضمن هذه الخصائص المجال المحتمل من القيم التي يمكن الس ماح به ا للس مات ،مث ل :رم ز
مقررات الطالب ،student course codeوعنوان المق رر ،course titleونق اط الائتم ان credit pointsفي
قاعدة بيانات المدرسة على سبيل المثال.
يو ِّفر نموذج البيانات المفاهيمي تمثياًل رسم ًيا مشتر ًكا لما يجري توصيله بين العملاء والمطورين أثناء تط وير
قاعدة البيانات ،فهذا النموذج يركز على البيانات في قاعدة البيان ات ،بغض النظ ر عن الاس تخدام النه ائي لتل ك
البيانات في عمليات المستخ ِدم ،أو تطبيق البيانات في بيئ ات حاس وبية مح َّددة ،ل ذلك يهتم نم وذج البيان ات
المفاهيمي بمعنى البيانات وبنيتها ،وليس بالتفاصيل التي تؤثر على كيفية تطبيقها.
إ ًذا يُ َع ّد نموذج البيانات المفاهيمي تمثياًل رسم ًيا للبيانات التي يجب أن تحتويه ا قاع دة البيان ات ،والقي ود
التي يجب على البيانات تلبيتها ،كما يجب التعب ير عن ذل ك بمص طلحات مس تقلة عن كيفي ة تنفي ذ النم وذج،
111
تصميم قواعد البيانات عملية تطوير قواعد البيانات
لذلك ير ِّكز التحليل على الأسئلة التي تحتوي عبارات مث ل عب ارة "م ا ه و المطل وب؟" وليس على الأس ئلة ال تي
تحتوي عبارات مثل عبارة "كيف يتحقق ذلك؟".
11.5التصميم المنطقي Logical Design
تب دأ مرحل ة تص ميم قاع دة البيان ات بنم وذج بيان ات مف اهيمي وينتج عنه ا مواص فات التخطيط
المنطقي logical schemaالذي سيح ِّدد نوع نظام قاعدة البيانات المطلوب -أي سيحدد إن كان من نوع شبكي،
أو علائقي ،أو كائني التوجه.-
لا يزال التمثيل العلائقي relational representationمستقاًل عن أي نظ ام إدارة قواع د البيان ات ،DBMS
فهو نموذج بيانات مفاهيمي آخر.
يمكننا استخدام التمثيل العلائقي لنموذج البيانات المفاهيمي على أساس دخ ٍل لعملية التصميم المنطقي،
وخرج هذه المرحلة هو مواصفات علائقية مف َّص لة أي تخطي ط منطقي لجمي ع الج داول والقي ود اللازم ة لتلبي ة
وصف البيانات في نموذج البيانات المفاهيمي.
تُخت ار الج داول الأك ثر ملاءم ة أثن اء نش اط التص ميم لتمثي ل البيان ات في قاع دة بيان ات،
ولكن يجب أخذ هذه الاختيارات في الحسبان معايير التصميم المختلفة بما في ذل ك على س بيل المث ال مرون ة
التغي ير ،والتحكم في التض اعف أو الاستنس اخ ،duplicationوأفض ل طريق ة لتمثي ل القي ود.
تح ِّدد الجداول المح َّددة بالتخطيط المنطقي البيانات المخزَّنة وكيفية معالجتها في قاعدة البيانات.
يتجه مصممو قواعد البيانات المل ّمون بقواعد البيانات العلائقية ولغة الاس تعلامات الهيكلي ة SQLلل ذهاب
مباشر ًة إلى مرحلة التطبيق بعد إنتاج نموذج البيانات المفاهيمي لكن لا يؤدي مثل هذا التحول المباشر للتمثي ل
العلائقي إلى ج داول SQLبالض رورة إلى قاع دة بيان ات تحت وي على جمي ع الخص ائص المرغوب ة مثل
الكم ال completenessوالس لامة integrityوالمرون ة flexibilityوالكف اءة efficiencyوقابلية
الاستخدام ،usabilityإذ يُ َع ّد نموذج البيانات المفاهيمي الجيد خطو ًة أولى أساسية نحو قاع دة بيان ات له ا ه ذه
الخصائص ،لكن لا يعني هذا أ ّن التحول المباشر إلى جداول SQLينتج قاعدة بيانات جيدة تلقائ ًيا.
ستمثل هذه الخطوة الأولى بدقة الجداول والقيود اللازمة لتلبية وصف نموذج البيانات المفاهيمي ،وبالت الي
ستلبي متطلبات الكمال والسلامة ،ولكنها قد تكون غير مرنة ،أو قد تق ِّدم قابلية اس تخدام ض عيفة ،يُث َنى flexed
التصميم الأول بعد ذلك لتحسين جودة تصميم قاعدة البيانات ،ويهدف مصطلح الثني Flexingإلى أخذ الأفك ار
المتزامنة من شيء مثني لغ رض مختل ف وتش ذيب ج وانب من ه ذا الش يء -أي الوص ول إلى الغاي ة نفس ها
بطريقة وفكرة أخرى تحقق المقصود.-
يلخص الش كل الآتي الخط وات التكراري ة الموج ودة في تص ميم قاع دة البيان ات بن ا ًء على النظ رة العام ة
المق َّدمة ،كما يكون الغرض الرئيسي من هذا الشكل هو التمييز بين الهدف العام للجداول التي يجب استخدامها
عن التعريف المف َّصل للأجزاء المك ِّونة لكل جدول ،حيث تُد َرس هذه الج داول واح ًدا تل و الآخ ر رغم أنه ا ليس ت
112
تصميم قواعد البيانات عملية تطوير قواعد البيانات
مست ِقل ًة عن بعضها البعض ،كما سيؤدي كل تكرار يتض ّمن مراجع ًة للجداول إلى تص ميم جدي د ،ويش ار إلى ه ذه
التصاميم الجديدة م ًعا باسم تصاميم القط ع الث اني second-cut designsح تى ل و تك ررت العملي ة لأك ثر من
حلق ٍة واحدة.
أواًل ،ليس من الضروري تلبي ة جمي ع متطلب ات المس تخدم ال تي يمثله ا نم وذج بيان ات مف اهيمي معين
بواسطة قاعدة بيانات واحدة ،كما يوجد أسباب مختلفة لتطوير أكثر من قاعدة بيان ات ،مث ل :الحاج ة إلى عملي ة
مست ِقلة في مواقع مختلفة ،أو التحكم الإداري ببيانات قواعد البيانات ،لكن إذا احتوت مجموعة قواع د البيان ات
على بيانات مضا َعفة وكان المستخ ِدمون بحاجة للوصول إلى البيانات في أكثر من قاعدة بيانات ،فهناك أس باب
محتمل ة لتل ّبِي قاع دة بيان ات واح دة متطلب ات متع ددة ،وإلا فيجب فحص المش اكل المتعلق ة بمض ا َعفة
البيانات وتوزيعها.
ثان ًيا ،أحد الافتراضات حول تطوير قاعدة البيانات ه و أن ه يمكنن ا فص ل تط وير قاع دة البيان ات عن تط وير
عمليات المستخدم التي تستفيد منها ،ويستند ذلك إلى تو ّقع تحديد جميع البيانات المطلوبة بواس طة عملي ات
المستخ ِدم المح َّددة حال ًيا ،وإمكانية الوص ول إليه ا بمج رد تط بيق قاع دة البيان ات ،لكنن ا نطلب أي ًض ا المرون ة
للسماح بتلبية تغيرات المتطلب ات المس تقبلية ،كم ا يمكن التنب ؤ بالطلب ات الش ائعة ال تي س ُتق َّدم إلى قاع دة
البيانات عند تطوير قاعدة بيانات لبعض التطبيقات ،وبالتالي يمكننا تحسين تصميمنا للطلبات الأكثر شيو ًعا.
ثال ًثا ،تعتمد العديد من جوانب تصميم قاعدة البيان ات وتطبيقه ا في المس توى التفص يلي على نظ ام إدارة
قاعدة البيانات DBMSالمستخ َدم ،فإذا كان اختيار نظام إدارة قواعد البيانات ثاب ًتا أو ُأجرِي قبل مهم ة التص ميم،
فيمكن استخدام هذا الاختيار لتحديد مع ايير التص ميم ب داًل من الانتظ ار ح تى مرحل ة التط بيق ،أي يمكن دمج
113
تصميم قواعد البيانات عملية تطوير قواعد البيانات
قرارات التصميم لنظام إدارة قاعدة البيانات DBMSمعين عو ًضا عن إنتاج تصميم عام ،ثم تكييفه مع نظ ام إدارة
قاعدة البيانات DBMSأثناء التطبيق.
ليس غري ًبا العثور على تصميم مفرد لا يمكنه تلبية جميع خصائص قاعدة البيانات الجيدة في الوقت نفسه،
ل ذلك من المهم أن يعطي المص مم الأولوي ة له ذه الخص ائص ،ويك ون ذل ك ع اد ًة باس تخدام معلوم ات من
مواصفات المتطلبات ،مثل :تحديد ما إذا كانت السلامة أهم من الكفاءة ،وما إذا كانت قابلية الاستخدام أهم من
المرونة في تطوير مع َّين.
ستح ِّدد تعليمات لغة تعريف البيانات - data definition languageأو DDLاختصا ًرا -الخاص ة بلغ ة SQL
التخطيط المنطقي في نهاية مرحلة التصميم ،حيث تصف لغة DDLقاعدة البيانات ال تي يجب تطبيقه ا لتلبي ة
متطلبات المستخ ِدم.
11.6التطبيق Implementation
تتض من مرحل ة التنفي ذ أو التط بيق Implementationبن اء قاع دة بيان ات وف ًق ا لمواص فات التخطي ط
المنطقي ،والذي سيتض ّمن مواصفات تخطيط التخزين storage schemaالمناسب ،وفرض الأمان ،والتخطيط
الخارجي ،وما إلى ذل ك ،كم ا يت أثر التط بيق بش دة باختي ار نظم إدارة قواع د البيان ات المتاح ة ،وأدوات قواع د
البيانات ،وبيئة التشغيل.
هناك مهام إضافية تتجاوز مجرد إنشاء تخطيط قاعدة بيانات database schemaوتطبيق القيود ،إذ يجب
إدخال البيانات في الجداول ،ومعالجة القض ايا المتعلق ة بالمس تخ ِدمين وعملي ات المس تخ ِدم ،كم ا يجب دعم
الأنشطة الإدارية المرتبطة بالجوانب الأوسع لإدارة بيانات الشركة.
نريد معالجة أكبر عدد ممكن من هذه القضايا المو َّضحة أدناه داخل نظام إدارة قواعد البيانات تماش ًيا مع نهج
نظم إدارة قواعد البيانات.
يتطلب تط بيق التخطي ط المنطقي عمل ًي ا في نظ ام إدارة قواع د البيان ات DBMSمعرف ًة مفص ل ًة للغاي ة
بالميزات والفوائد المحددة التي يجب تقديمها من ِق َبل نظام إدارة قواعد البيانات.
ستشمل المرحلة الأولى من التطبيق انس جا َم متطلب ات التص ميم م ع أفض ل أدوات التط بيق المتاح ة ثم
استخدام تلك الأدوات للتطبيق ،وذلك مثال ًيا وتماش ًيا مع الممارسة الجيدة لهندسة البرمجيات ،كما قد يتض من
ذلك في قواعد البيانات على اختيار منتجات البائ ِعين ذات متغيرات من نظام إدارة قواعد البيانات DBMSولغ ة
SQLالأكثر ملاءمة لقاعدة البيانات التي نحتاج إلى تطبيقها ،لكننا لا نعيش في عالم مثالي ،كما س ُتتخَذ في كث ير
من الأحيان قرارات اختيار العتاد والقرارات المتعلقة بنظام إدارة قواعد البيان ات DBMSقب ل النظ ر في تص ميم
قاعدة البيانات بوقت طويل ،وبالتالي ،يمكن أن يتضمن التطبيق ثن ًيا إضاف ًيا للتصميم للتغلب على مح دوديات
البرمجيات أو العتاد.
114
تصميم قواعد البيانات عملية تطوير قواعد البيانات
11.7تحقيق التصميم Realizing the Design
نحتاج إلى إنشاء قاعدة بياناتنا بعد إنشاء التصميم المنطقي وف ًقا للتعريفات التي أنتجناه ا ،كم ا يُحت َم ل أن
يتضمن التطبيق مع نظام إدارة قواعد البيانات DBMSالعلائقي استخدام لغة SQLلإنش اء ج داول وقي ود تل بي
وصف التخطيط المنطقي واختيار تخطيط التخزين المناسب -إذا كان نظام إدارة قواع د البيان ات DBMSيس مح
بهذا المستوى من التحكم.
تتمثل إحدى طرق تحقيق ذلك في كتابة تعليم ات لغ ة SQL DDLالمناس بة في مل ف يمكن لنظ ام إدارة
قواعد البيانات DBMSتنفيذه ،بحيث يكون هناك سجل مس تقل أو مل ف نص ي من تعليم ات لغ ة SQLال تي
تع رِّف قاع دة البيان ات؛ أم ا الطريق ة الأخ رى فهي العم ل تفاعل ًي ا باس تخدام أداة قاع دة بيان ات مثل
الأداتين SQL Server Management Studioأو .Microsoft Access
مهما كانت الآلية المستخ َدمة لتطبيق التخطيط المنطقي ،فالنتيج ة هي أن قاع دة البيان ات -م ع الج داول
والقيود -معرَّفة ولكنها لن تحتوي على بيانات لعمليات المستخ ِدم.
11.8ملء قاعدة البيانات Populating the Database
يوجد طريقتان لملء الج داول بع د إنش اء قاع دة البيان ات؛ إم ا من بيان ات موج ودة أو من خلال اس تخدام
تطبيقات المستخ ِدم المط َّورة لقاعدة البيانات.
قد تكون هناك بيانات موجودة من قاعدة بيانات أو ملف ات بيان ات أخ رى وذل ك بالنس بة لبعض الج داول
فمثاًل نتوقع عند إنشاء قاعدة بيانات لمستشفى وجود بعض السجلات بالفعل لجميع الموظفين المراد تضمينهم
في قاعدة البيانات ،كما يمكن أي ًضا إحضار البيانات من وكالة خارجية مث ل ق وائم العن اوين ال تي تُجلَب بص ورة
متكررة من شركات خارجية أو يمكن إنتاجها أثناء مهمة إدخ ال بيان ات كب يرة -أي يمكن إج راء تحوي ل الس جلات
اليدوية المطبوعة إلى ملفات حاسوبية بواسطة وكالة إدخال بيانات -ويُ َع ّد استخدام وس ائل الاس تيراد والتص دير
الموجودة في نظام إدارة قواعد البيانات DBMSأبسط طريقة لملء قاعدة البيانات في مثل هذه الحالات.
تتوفر عاد ًة وسائل لاستيراد وتصدير البيانات بتنسيقات قياسية مختلفة ،وتُع َرف ه ذه الوظ ائف أي ًض ا في
بعض الأنظمة باسم تحميل loadingالبيانات وتفريغه ا ،unloadingكم ا ي تيح الاس تيراد إمكاني ة نس خ مل ف
البيانات مباشر ًة إلى جدول.
إذا جرى الاحتفاظ بالبيانات بتنسيق ملف غير مناس ب لاس تخدام عملي ة الاس تيراد ،فيجب إع داد برن امج
تطبيقي يق رأ البيان ات القديم ة ،ويح ّوله ا حس ب الض رورة ،ثم ي دخلها في قاع دة البيان ات باس تخدام ش يفرة
لغة SQLالذي ُأنت ِجت خصي ًصا من أجل هذا الهدف.
115
تصميم قواعد البيانات عملية تطوير قواعد البيانات
يُس ّمى نقل كمي ات كب يرة من البيان ات الموج ودة إلى قاع دة بيان ات بالتحمي ل المج َّمع ،bulk loadوق د
يتضمن التحميل المج َّمع للبيانات كميات كبير ًة ج ًدا من البيانات ال ُمح َّملة أي تحمي ل ج دول في نفس ال وقت،
لذلك قد تجد وسائل في نظام إدارة قواعد البيانات DBMSلتأجيل فحص قيد حتى نهاية التحميل المج َّمع.
11.9إرشادات لتطوير مخطط ER
لاحظ أن هذه الإرش ادات العام ة ستس اعد في تط وير أس اس ق وي لتص ميم قاع دة البيان ات الفعلي ة أي
النموذج المنطقي:
.1وثّق جميع الكيانات المكت َشفة خلال مرحلة جمع المعلومات.
.2وثّق جميع السمات التي تنتمي إلى كل كيان ،وح ّدد المف اتيح المر َّش حة ،candidate keysوالمف اتيح
الرئيس ية ،primary keysكم ا تأك د من اعتمادي ة جمي ع الس مات ال تي ليس ت
مفاتيح non-key attributesلكل كيان بصورة كاملة على المفتاح الرئيسي.
.3ط ِّور مخطط ERالأولي وراجعه مع الأشخاص المناسبين ،وتذ َّكر أن هذه عملية تكرارية.
.4أن ِشئ كيانات -أي جداول -جديدة للسمات متعددة القيم والمجموعات المكرَّرة ،ثم ض ِّمن هذه الكيانات-
أي الجداول -الجديدة في مخطط ،ERوراجع ذلك مع الأشخاص المناسبين.
.5تح َّقق من نمذجة الكيان العلائقي ERعبر تطبيق عملية التوحيد normalizingعلى الجداول.
11.10مصطلحات أساسية
• التحليل :analysisتبدأ مرحلة التحليل من خلال النظر في وثيقة المتطلبات وتنتهي من خلال إنتاج
مواصفات النظام.
• التحميل المج َّمع :bulk loadهو نقل كميات كبيرة من البيانات الموجودة إلى قاعدة بيانات.
• وثيقة متطلبات البيانات :data requirements documentوتُستخ َدم هذه الوثيقة لتأكيد فهم
المتطلبات مع المستخ ِدم.
• التصميم :designتبدأ مرحلة التصميم بمواصفات النظام ،وينتج عنها وثائق التصميم ،كما يو ّفر وص ًفا
تفصيل ًيا لكيفية بناء النظام.
• تحديد المتطلبات :establishing requirementsتتضمن هذه المرحلة التشاور والاتفاق مع أصحاب
المصلحة على ما يريدونه من النظام ،كما يع َّبر عنها بوثيقة المتطلبات.
• الثني :flexingمصطلح يهدف إلى أخذ الأفكار المتزامنة من شيء مثني لغاية مختلفة وإضعاف
جوانب من هذا الشيء عند ثنيه.
116
تصميم قواعد البيانات عملية تطوير قواعد البيانات
• التطبيق :implementationبناء نظام حاسوبي وف ًقا لوثيقة تصميم معينة.
• الصيانة :maintenanceتتضمن هذه المرحلة التعامل مع تغيرات المتطلبات ،أو بيئة التطبيق ،أو
إصلاح الأخطاء ،أو نقل النظام إلى بيئات جديدة.
• جمع المتطلبات :requirements gatheringعملية يقابل خلالها مصمم قاعدة البيانات مستخ ِدم
قاعدة البيانات لفهم النظام المقت َرح ،وذلك للحصول على البيانات ،والمتطلبات الوظيفية ،وتوثيقها.
• تصاميم القطع الثاني :second-cut designsمجموعة التكرارات التي يتضمن كل منها مراجعة
الجداول التي تؤدي إلى تصميم جديد.
• دورة حياة تطوير البرمجيات software development life cycleأو :SDLCسلسلة لخطوات
عملية تطوير قواعد البيانات.
• الاختبار :testingتوازن هذه المرحلة النظام المط َّبق مع وثائق التصميم ومواصفات المتطلبات ،وينتج
عنها تقرير قبول.
• نموذج الشلال :waterfall modelيُظ ِهر هذا النموذج عملية تطوير قاعدة البيانات مثل تسلسل صارم
من الخطوات حيث يكون خرج خطوة دخاًل للخطوة التالية.
• عملية نموذج الشلال :waterfall processوسيلة لتحديد المهام المطلوبة لتطوير قاعدة البيانات،
بالإضافة إلى دخل وخرج كل نشاط.
11.11تمارين
.1اشرح نموذج الشلال ،واذكر خطواته.
.2ماذا يعني الاختصار SDLC؟ وما الذي يمثله؟
.3ما الذي يجب تعديله في نموذج الشلال لاستيعاب تصميم قاعدة البيانات؟
.4اذكر الخطوات التكرارية الموجودة في تصميم قاعدة البيانات.
117
.12لغة الاستعلامات الهيكلية SQL
لغ ة الاس تعلامات الهيكلي ة - Structured Query Languageأو SQLاختص ا ًرا -هي لغ ة قاع دة بيان ات
مص َّممة لإدارة البيانات الموجودة في نظام إدارة قواعد البيانات العلائقية.
ط ّورت شركة IBMلغة SQLفي أوائ ل الس بعينات -عُرِفت بالإص دار ،-1986حيث ُص ِّمم الإص دار الأولي
المس َّمى بلغ ة الاس تعلامات الهيكلي ة الإنجليزي ة - SEQUELاختص ا ًرا للعب ارة Structured English Query
-Languageلمعالجة واسترداد البيانات المخزَّنة في نظام خاص بشركة IBMوشبه علائقي لإدارة قواعد البيان ات
،quasi-relational database management systemويُس َّمى نظام .R
ق ّدمت بعد ذلك شركة - Relational Software Incوالتي أصبحت الآن شركة -Oracle Corporationأول
تطبيق متاح تجاريًا للغة SQLوالمس َّمى بـ Oracle V2لحواسيب VAXفي أواخر السبعينات من القرن الماضي.
تُستخ َدم العديد من أنظمة DBMSالعلائقية المتاحة حال ًيا ،مثل:
• Oracle Database
• Microsoft SQL Server
• MySQL
• IBM DB2
• IBM Informix
• Microsoft Access
تصميم قواعد البيانات لغة الاستعلامات الهيكلية SQL
تُستخ َدم لغة قاعدة بيانات SQLفي نظام DBMSمن أجل:
• إنشاء بنى قواعد البيانات والجداول.
• إجراء الأعمال الأساسية لإدارة البيانات ،مثل :الإضافة ،والحذف ،والتعديل.
• إجراء استعلامات مع َّقدة لتحويل البيانات الأولية إلى معلومات مفيدة.
سوف نركز في هذا الفصل على استخدام لغة SQLلإنشاء بنى قواعد البيانات والجداول ،باستخدام لغة SQL
على أساس لغة تعريف بيانات - data definition languageأو -DDLبصورة أساسية.
سنستخدم لغة SQLفي فصل لاح ق على أس اس لغ ة معالج ة بيان ات data manipulation language
أو DMLلإدخال البيانات ،وحذفها ،واختيارها ،وتحديثها في جداول قاعدة البيانات.
12.1إنشاء قاعدة بيانات Create Database
تتك ّون عبارات لغة SQL DDLالرئيسية من :عملية إنشاء قاعدة البيانات ،CREATE DATABASEوعمليات
الإنشاء CREATEوالحذف DROPوالتع ديل ALTERعلى الج داول ،إذ تُس تخ َدم عب ارة CREATEفي لغ ة SQL
لإنشاء بنى قواعد البيانات والجداول.
12.1.1مثال عن إنشاء قاعدة بيانات
تُن َشأ قاعدة بيانات جديدة تس َّمى SWباس تخدام العب ارة CREATE DATABASE SWبلغ ة .SQLالخط وة
التالية بعد إنشاء قاعدة البيانات هي إنشاء جداول قاعدة البيانات.
التنسيق العام للأمر CREATE TABLEهو:
>CREATE TABLE <tablename
(
ColumnName, Datatype, Optional Column Constraint,
ColumnName, Datatype, Optional Column Constraint,
Optional table Constraints
;)
يكون Tablenameاسم جدول قاعدة البيانات مثل جدول الموظف ،Employeeكما يتك ون ك ل حق ل من
الأمر CREATE TABLEمن ثلاثة أجزاء ،هي:
.1اسم العمود ColumnName
.2نوع البيانات Data type
.3قيد عمود اختياري Optional Column Constraint
119
تصميم قواعد البيانات لغة الاستعلامات الهيكلية SQL
12.1.2اسم العمود ColumnName
يجب أن يكون اس م العم ود ColumnNameفري ًدا في الج دول ،وبعض الأمثل ة على أس ماء الأعم دة هي
،FirstNameو .LastName
12.1.3نوع البيانات Data Type
يجب على نوع البيانات أن يكون نوع بيانات نظام أو نوع بيانات يعرِّفه المستخ ِدم ،كما تملك العديد من أنواع
البيانات حج ًما ،مثل ،CHAR(35( :أو (.Numeric(8,2
• النوع :Bitبيانات أعداد صحيحة Integerلها قيمة 1أو .0
• النوع :Intبيانات أعداد صحيحة Integerلها القيم من -2^31أي -2,147,483,648حتى 2^31 – 1أي
.2,147,483,647
• النوع :Smallintبيانات أعداد صحيحة Integerلها القيم من -2^15أي -32,768ح تى 2^15 – 1أي
.32,767
• النوع :Tinyintبيانات أعداد صحيحة Integerلها القيم من 0حتى .255
• النوع :Decimalبيانات ذات دقة ثابتة وقياس رقمي لها القيم من -10^38 -1إلى .10^38
• النوع :Numericمرادف للنوع .decimal
• النوع :Timestampرقم فريد على مستوى قاعدة البيانات.
globally unique ا identifier د عالم ًي رَّف فري • الن وع :Uniqueidentifierمع
أو GUIDاختصا ًرا.
• الن وع :Moneyت تراوح قيم البيان ات النقدي ة من -2^63أي -922,337,203,685,477.5808ح تى
الع دد 2^63 – 1أي 922,337,203,685,477.5807بدق ة تص ل إلى واح د من عش رة آلاف من
الوحدة النقدية.
• الن وع :Smallmoneyت تراوح قيم البيان ات النقدي ة من -214,748.3648إلى +214,748.3647بدق ة
تصل إلى واحد من عشرة آلاف من الوحدة النقدية.
• النوع :Floatبيانات أرقام ذات دقة عشرية تتراوح قيمها بين -1.79E + 308و .1.79E + 308
• النوع :Realبيانات أرقام ذات دقة عشرية قيمها تتراوح من -3.40E + 38حتى .3.40E + 38
• النوع :Datetimeبيانات التاريخ والوقت تتراوح قيمها من تاريخ 1ين اير ك انون الث اني 1753إلى ت اريخ
31ديسمبر كانون الأول 9999بدقة تبلغ واحد إلى ثلاثة أجزاء من مئة من الثانية ،أو 3.33ميلي ثانية.
120
تصميم قواعد البيانات لغة الاستعلامات الهيكلية SQL
• النوع :Smalldatetimeبيانات التاريخ والوقت تتراوح قيمها من تاريخ 1يناير كانون الث اني 1900ح تى
تاريخ 6يونيو حزيران 2079بدقة تبلغ دقيقة واحدة.
• النوع :Charبيانات محارف ثابتة الطول وليست يونيكود بطول أقصى 8000محرف.
• النوع :Varcharبيانات متغيرة الطول وليست يونيكود بحد أقصى 8000محرف.
• النوع :Textبيانات متغيرة الطول وليست يونيكود بطول أقص ى يبل غ 2^31 – 1أي 2,147,483,647
محر ًفا.
• النوع :Binaryبيانات ثنائية ذات طول ثابت بطول أقصى 8000بايت.
• النوع :Varbinaryبيانات ثنائية متغيرة الطول بطول أقصى يبلغ 8000بايت.
• النوع :Imageبيانات ثنائية متغيرة الطول بطول أقصى 2^31 – 1أي 2,147,483,647بايت.
12.1.4قيود العمود الاختيارية Optional Column Constraints
قيود العمود الاختيارية هي ،NULLو ،NOT NULLو ،UNIQUEو ،PRIMARY KEYو ،DEFAULTوتُستخ َدم
لتهيئة قيمة لسجل جديد.
يشير قيد العمود NULLإلى أن القيمة الفارغة nullمسموح به ا ،مم ا يع ني أن ه يمكن إنش اء ص ف ب دون
قيمة لهذا العمود ،ويشير قيد العمود NOT NULLإلى وجوب توفير قيمة عند إنشاء صف جديد.
سنستخدم تعليمة لغة SQLللتوضيح والتي هي CREATE TABLE EMPLOYEESلإنشاء جدول م وظفين
يحتوي على 16سمة attributesأو حقل .fields
USE SW )CHAR(10 NOT NULL UNIQUE,
CREATE TABLE EMPLOYEES )CHAR(30 NOT NULL DEFAULT
(
EmployeeNo )CHAR(25 NOT NULL,
DepartmentName )CHAR(25 NOT NULL,
“Human Resources”, )CHAR(20 NOT NULL,
FirstName CURRENCY NOT NULL,
LastName LOGICAL NOT NULL,
Category )CHAR(1 NOT NULL,
HourlyRate )CHAR(1 NOT NULL,
TimeCard LOGICAL NOT NULL,
HourlySalaried
EmpType
Terminated
121
تصميم قواعد البيانات SQL لغة الاستعلامات الهيكلية
ExemptCode CHAR(2) NOT NULL,
Supervisor
SupervisorName LOGICAL NOT NULL,
BirthDate
CollegeDegree CHAR(50) NOT NULL,
CONSTRAINT
); DATE NOT NULL,
CHAR(5) NOT NULL,
Employee_PK PRIMARY KEY(EmployeeNo)
ولا يمكن للمس تخ ِدم، مح ارف10 ويبلغ طول هذا الحق ل،CHAR من النوعEmployeeNo الحقل الأول هو
.30 بطولCHAR من النوعDepartmentName أما الحقل الثاني هو،NOT NULL ترك هذا الحقل فار ًغا
،primary key لإنش اء المفت اح الأساس يCONSTRAINT يُستخ َدم قيد الجدول المع رَّف بواس طة الكلم ة
: أي كما يلي،وذلك بعد تعريف جميع أعمدة الجدول
CONSTRAINT EmployeePK PRIMARY KEY(EmployeeNo)
باس تخدامAssignment وجدول مهام،Project وجدول مشاريع،Department يمكننا إنشاء جدول أقسام
: كما هو مو َّضح في المثال التالي،SQL DDL بلغةCREATE TABLE الأمر
USE SW
CREATE TABLE DEPARTMENT
(
DepartmentName Char(35) NOT NULL,
BudgetCode Char(30) NOT NULL,
OfficeNumber Char(15) NOT NULL,
Phone Char(15) NOT NULL,
CONSTRAINT DEPARTMENT_PK PRIMARY KEY(DepartmentName)
);
واسم،ProjectID مع رِّف المش روع: الت الي بس بعة حق ول هيproject ُأن ِش ئ ج دول المش اريع
وت اريخ،MaxHours والح د الأقص ى للس اعات،Department والقس م،ProjectName المش روع
.EndDate وتاريخ الانتهاء،StartDate البدء
USE SW
CREATE TABLE PROJECT
(
ProjectID Int NOT NULL IDENTITY (1000,100),
ProjectName Char(50) NOT NULL,
122
تصميم قواعد البيانات لغة الاستعلامات الهيكلية SQL
Department Char(35) NOT NULL,
MaxHours Numeric(8,2) NOT NULL DEFAULT 100,
StartDate DateTime NULL,
EndDate DateTime NULL,
CONSTRAINT )ASSIGNMENT_PK PRIMARY KEY(ProjectID
;)
بينما ُأن ِشئ ج دول المه ام assignmentبثلاث ة حق ول ،هي :مع رِّف المش روع ،ProjectIDورقم الموظ ف
،EmployeeNumberوساعات العمل .HoursWorked
يُستخ َدم جدول المهام لتسجيل الموظف باستخدام الحقل ،EmployeeNumberومقدار الوقت باس تخدام
الحقل HoursWorkedالذي عمل فيه الموظف في مشروع معين باستخدام الحقل ،ProjectIDأي كما يلي:
USE SW
CREATE TABLE ASSIGNMENT
(
ProjectID Int NOT NULL,
EmployeeNumber Int NOT NULL,
HoursWorked Numeric(6,2) NULL,
;)
12.2قيود الجدول Table Constraints
تُعرَّف قيود الجدول بواسطة الكلمة المفتاحية CONSTRAINTويمكن استخدامها لتطبيق العديد من القيود
المو َّضحة أدناه.
12.2.1القيد IDENTITY
يمكننا استخدام قيد العمود الاختياري IDENTITYلتوفير قيمة فريدة تزايدية لهذا العمود ،إذ تُستخ َدم أعمدة
الهوية Identityمع قيود المفتاح الرئيسي PRIMARY KEYلتكون بمثابة معرِّف صف فريد للجدول ،كم ا يمكن
إسناد الخاص ية IDENTITYإلى عم ود ل ه ن وع بيان ات ،tinyintأو ،smallintأو ،intأو ،decimalأو ،numeric
وهذا القيد:
• يولِّد أرقا ًما متسلسل ًة.
• لا يفرض سلامة الكيان .entity integrity
• يمكن أن يحتوي عمود واحد فقط على الخاصية .IDENTITY
• يجب تعريفه على أساس نوع بيانات ،integerأو ،numericأو .decimal
123
تصميم قواعد البيانات لغة الاستعلامات الهيكلية SQL
• لا يمكن تحديث عمود له الخاصية .IDENTITY
• لا يمكن أن يحتوي على قيم فارغة .NULL
• لا يمكنه ربط الافتراضات والقيود الافتراضية بالعمود.
بالنسبة للقيد [(:IDENTITY[(seed, increment
• :Seedهي القيمة الأولية لعمود الهوية .identity
• :Incrementهي القيمة المطلوب إضافتها إلى عمود الزيادة incrementالأخير.
سنس تخدم مث ال قاع دة بيان ات آخ ر لتوض يح عب ارات لغ ة SQL DDLبص ورة أك بر من خلال إنش اء
الجدول tblHotelفي قاعدة بيانات الفندق HOTELكما يلي:
CREATE TABLE tblHotel
(
HotelNo Int IDENTITY (1,1),
NOT NULL,
Name )Char(50 NULL,
NULL,
Address )Char(50
City )Char(25
)
12.2.2القيد UNIQUE
يمنع القيد UNIQUEمن إدخال قيم مكررة في عمود ،حيث:
• يُستخ َدم القيدان ،PKو UNIQUEلفرض سلامة الكيان.
• يمكن تعريف قيود UNIQUEمتعددة للجدول.
• يجري دائ ًما التحقق من صحة البيانات الموجودة عند إضافة قيد UNIQUEإلى جدول موجود.
• يمكن وضع القيد UNIQUEعلى الأعمدة ال تي تقب ل القيم الفارغ ة ،حيث يمكن أن يك ون ص ٌف واح د
فقط .NULL
• ين ِشئ القيد UNIQUEدلياًل فري ًدا للعمود ال ُمختار تلقائ ًيا.
الصيغة التالية هي الصيغة العامة للقيد :UNIQUE
][CONSTRAINT constraint_name
]UNIQUE [CLUSTERED | NONCLUSTERED
)]](col_name [, col_name2 […, col_name16
124
تصميم قواعد البيانات لغة الاستعلامات الهيكلية SQL
][ON segment_name
يستخدم المثال التالي القيد UNIQUEكما يلي:
CREATE TABLE EMPLOYEES
(
EmployeeNo )CHAR(10 NOT NULL UNIQUE,
)
12.2.3القيد FOREIGN KEYالمفتاح الخارجي
يعرِّف القيد - FOREIGN KEYأو FKاختص ا ًرا -عم و ًدا ،أو مجموع ة من الأعم دة ال تي تتط ابق قيمه ا م ع
المفتاح الرئيسي - PRIMARY KEYأو PKاختصا ًرا -لجدول آخر ،بحيث:
• تُح َّدث القيم في المفت اح الخ ارجي FKتلقائ ًي ا عن د تح ديث أو تغي ير قيم المفت اح الرئيس ي PKفي
الجدول المرتبط.
• يجب أن تشير قيود المفتاح الخارجي FKإلى القيد المفتاح الرئيسي ،PKأو القيد UNIQUEلجدول آخر.
• يكون عدد أعمدة المفتاح الخارجي FKهو نفسه قيد المفتاح الرئيسي ،PKأو قيد .UNIQUE
• إذا اُس تخ ِدم الخي ار ،WITH NOCHECKفلن يتحق ق قي د المفت اح الخ ارجي FKمن ص حة البيان ات
الموجودة في الجدول.
• لا يوجد دليل indexللأعمدة التي تشارك في قيد المفتاح الخارجي .FK
الصيغة التالية هي الصيغة العامة لقيد المفتاح الخارجي :FOREIGN KEY
][CONSTRAINT constraint_name
])]][FOREIGN KEY (col_name [, col_name2 […, col_name16
])]]REFERENCES [owner.]ref_table [(ref_col [, ref_col2 […, ref_col16
يكون الحقل HotelNoفي المثال التالي في الج دول tblRoomمفتاحً ا خارج ًي ا FKللحق ل HotelNoفي
الجدول tblHotelالمو َّضح ساب ًقا:
USE HOTEL NOT NULL ,
GO NOT NULL,
CREATE TABLE tblRoom
(
HotelNo Int
RoomNo Int
125
تصميم قواعد البيانات SQL لغة الاستعلامات الهيكلية
Type Char(50) NULL,
Price Money NULL,
PRIMARY KEY (HotelNo, RoomNo),
FOREIGN KEY (HotelNo) REFERENCES tblHotel
)
CHECK القيد12.2.4
: بحيث، القيم التي يمكن إدخالها في جدولCHECK يق ِّيد القيد
.WHERE • يمكن أن يحتوي على شروط بحث مشابهة لعبارة
.• يمكنه الربط بين الأعمدة في نفس الجدول
من خلال تعب يرCHECK • يجب العم ل على تق ييم قاع دة التحق ق من ص حة البيان ات للقي د
.boolean expression بولياني
.• يمكن تعريفه لعمود له قاعدة مرتبطة به
:CHECK الصيغة التالية هي الصيغة العامة للقيد
[CONSTRAINT constraint_name]
CHECK [NOT FOR REPLICATION] (expression)
.Executive أوSuite أوDouble أوSingle : في المثال التالي على الأنواعType يقتصر حقل النوع
USE HOTEL
GO
CREATE TABLE tblRoom
(
HotelNo Int NOT NULL,
RoomNo Int NOT NULL,
Type Char(50) NULL,
Price Money NULL,
PRIMARY KEY (HotelNo, RoomNo),
FOREIGN KEY (HotelNo) REFERENCES tblHotel
CONSTRAINT Valid_Type
CHECK (Type IN ('Single', 'Double', 'Suite', 'Executive'))
)
126
تصميم قواعد البيانات SQL لغة الاستعلامات الهيكلية
أو يجب أن يك ون الح د،January 1, 2004 يجب في المثال التالي أن يكون تاريخ تع يين الموظ ف قب ل
: ألف دولار300 الأقصى للراتب
GO
CREATE TABLE SALESREPS
(
Empl_num Int Not Null
CHECK (Empl_num BETWEEN 101 and 199),
Name Char (15),
Age Int CHECK (Age >= 21),
Quota Money CHECK (Quota >= 0.0),
HireDate DateTime,
CONSTRAINT QuotaCap CHECK ((HireDate < “01-01-2004”) OR (Quota
<=300000))
)
DEFAULT القيد12.2.5
: بحيث، لتوفير قيمة تُضاف تلقائ ًيا لعمود ما إذا لم يو ّفرها المستخدمDEFAULT يُستخ َدم القيد
. واحد فقطDEFAULT • يمكن احتواء العمود على قيد
أو ال تي لها،timestamp في الأعم دة ال تي له ا ن وع البيان اتDEFAULT • لا يمكن اس تخدام القي د
.identity الخاصية
. تلقائ ًيا بعمود عند إنشائهاDEFAULT • ترتبط القيود
: هيDEFAULT الصيغة العامة للقيد
[CONSTRAINT constraint_name]
DEFAULT {constant_expression | niladic-function | NULL}
[FOR col_name]
:"Vancouver" على القيمةcity field لحقلdefault يضبط المثال التالي القيمة الافتراضية
USE HOTEL
ALTER TABLE tblHotel
Add CONSTRAINT df_city DEFAULT 'Vancouver' FOR City
127
تصميم قواعد البيانات لغة الاستعلامات الهيكلية SQL
12.3الأنواع التي ُيعرفها المستخدم User Defined Types
تعتمد الأنواع التي يعرِّفها المستخ ِدم دائ ًما على نوع البيانات التي يوفرها النظام ،فيمكن لهذه الأن واع ف رض
سلامة البيانات والسماح بالقيم الفارغة .nullsاختر الأن واع ال تي تك ون تحت الكلم ة " "Programmabilityفي
قاعدة البيانات الخاصة بك ،لإنشاء نوع بيانات يعرِّفه المستخ ِدم في خادم ،SQL Serverثم انقر بزر الفأرة الأيمن
واخ تر المس ار ' ،'New' –> 'User-defined data typeأو ن ّف ذ إج راء النظ ام sp_addtypeال ُمخ زَّن
أي ،system stored procedureثم اكتب ما يلي:
'sp_addtype ssn, 'varchar(11)', 'NOT NULL
سيؤدي هذا إلى إضافة نوع بيانات جديد عرّفه المستخدم يسمى SINبتسعة محارف.
يستخدم الحقل EmployeeSINنوع البيانات SINالذي عرّفه المستخدم في المثال التالي:
CREATE TABLE SINTable
(
EmployeeID INT Primary Key,
EmployeeSIN SIN,
CONSTRAINT CheckSIN
CHECK (EmployeeSIN LIKE
)' ]' [0-9][0-9][0-9] – [0-9][0-9] [0-9] – [0-9][0-9][0-9
)
12.3.1التعليمة ALTER TABLE
يمكن استخدام تعليمات ALTER TABLEلإضافة وحذف القيود ،بحيث:
• تسمح تعليمة ALTER TABLEبإزالة الأعمدة.
• يُتحقق من جميع البيانات الموجودة عند إضافة قيد للتأكد من عدم وجود انتهاكات.
نستخدم في المثال تعليمة ALTER TABLEللخاصية IDENTITYفي الحقل :ColumnName
USE HOTEL
GO
ALTER TABLE tblHotel
)ADD CONSTRAINT unqName UNIQUE (Name
استخدم تعليمة ALTER TABLEلإضافة عمود مع الخاصية .IDENTITY
128
تصميم قواعد البيانات لغة الاستعلامات الهيكلية SQL
ADD )int IDENTITY(seed, increment
ColumnName
12.3.2التعليمة DROP TABLE
تزي ل التعليم ة DROP TABLEج دواًل من قاع دة البيان ات ،ل ذلك يجب علي ك التأك د من تحدي د قاع دة
البيانات الصحيحة.
DROP TABLE tblHotel
سيؤدي تنفيذ عبارة DROP TABLEبلغة SQLإلى إزالة الجدول tblHotelمن قاعدة البيانات.
12.4مصطلحات أساسية
• :DDLاختصار للغة تعريف البيانات .data definition language
• :DMLاختصار للغة معالجة البيانات .data manipulation language
• :SEQUELاختصار للغة الاستعلامات الهيكلية الإنجليزية Structured English Query Language
التي ُص ِّممت لمعالجة واسترداد البيانات المخزَّنة في نظام شبه علائقي لإدارة قواعد
البيانات ،quasi-relational database management systemوخاص بشركة ،IBMويس َّمى نظام .R
• لغة الاستعلامات الهيكلية Structured Query Languageأو :SQLلغة قاعدة بيانات مص َّممة
لإدارة البيانات الموجودة في نظام إدارة قواعد البيانات العلائقية.
12.5تمارين
.1باستخدام المعلومات الخاصة بالتمرين الموجود في الفصل قواعد السلامة والقيود ال ُمط َّبقة عند تصميم
قواعد البيانات ،ط ّبق التخطيط بلغة Transact SQLأي اعرض تعليمات SQLلكل جدول وط ّبق القيود.
.2أنشئ الجدول Employeeالمو َّضح أدناه في خادم ،SQL Serverواعرض التعليمات التي استخدمتها.
النوع اسم الحقل (العمود)
EMP_NUM
)CHAR(3 EMP_LNAME
)VARCHAR(15 EMP_FNAME
)VARCHAR(15 EMP_INITIAL
)CHAR(1 EMP_HIREDATE
DATE JOB_CODE
)CHAR(3
129
تصميم قواعد البيانات لغة الاستعلامات الهيكلية SQL
.3اكتب شيفرة لغة SQLلإدخال صفوف الجدول السابق ،بعد إنشاء بنيته.
استخدم الجدول السابق للإجابة على الأسئلة من 4إلى .10
EMP_NUM EMP_LNAME EMP_FNAME EMP_INITIAL EMP_HIREDATE _JOB
CODE
101 News John G 08-Nov-00 502
H 12-Jul-89 501
102 Senior David E 01-Dec-96 500
K 15-Nov-87 501
103 Arnough June K 01-Feb-93 502
22-Jun04 500
104 Ramoras Anne D 10-Oct-93 500
B 22-Aug-91 501
105 Johnson Alice W 18-Jul-97 501
106 Smithfield William
107 Alonzo Maria
108 Washington Ralph
109 Smith Larry
.4اكتب شيفرة لغة SQLلتغي ير رم ز الوظيف ة job codeإلى 501للموظ ف ال ذي رقم ه ،107وافحص
النتائج بعد الانتهاء من المهمة ،ثم أعد ضبط رمز الوظيفة إلى قيمته الأصلية.
.5اكتب شيفرة لغة SQLلإعط اء قائم ة بجمي ع الس مات الخاص ة برم ز الوظيف ة ،502ب افتراض إدخ ال
البيانات المو َّضحة في جدول الموظف .Employee
.6اكتب شيفرة لغة SQLلحذف الصف الخاص بالش خص ال ذي اس مه " ،"William Smithfieldوال ذي
ُو ِّظف في ،June 22, 2004والذي تصنيف رمز وظيفته هو .500
استخدم المعاملات المنطقية لتضمين جميع المعلومات الواردة في هذه المسألة
.7أضف السمتين ،EMP_PCTو PROJ_NUMإلى جدول الموظف ،بحيث تك ون الس مة EMP_PCTهي
نسبة المكافأة المدفوعة لكل موظف.
.8اكتب شيفرة لغة SQLباستخدام أمر واحد لإدخال رقم المشروع PROJ_NUM = 18لجميع الموظفين
الذين تصنيف الوظيفة JOB_CODEالخاص بهم هو .500
.9اكتب شيفرة لغة SQLباستخدام أمر واحد لإدخال رقم المشروع PROJ_NUM = 25لجميع الموظفين
الذين تصنيف الوظيفة JOB_CODEالخاص بهم يساوي 502أو أعلى.
.10اكتب شيفرة لغة SQLلتغيير رقم المشروع PROJ_NUMإلى 14للموظفين الذين تع ّينوا قبل January
،1, 1994ورمز الوظيفة الخاصة بهم يساوي 501على الأقل( .قد تفترض أن الجدول سيعاد إلى حالت ه
الأصلية التي سبقت هذا السؤال).
130
.13لغة معالجة البيانات DMLالخاصة
بلغة SQL
تُستخ َدم لغة معالج ة البيان ات - Data Manipulation Languageأو DMLاختص ا ًرا -الخاص ة بلغ ة SQL
للاستعلام عن البيانات في قاعدة البيانات وتعديلها ،وسنشرح في هذا الفصل كيفي ة اس تخدام تعليم ات أوام ر
لغة SQL DMLوالتي هي SELECTو INSERTو UPDATEو DELETEال ُمعرَّفة كما يلي:
• :SELECTللاستعلام عن بيانات في قاعدة البيانات.
• :INSERTلإدخال بيانات في جدول.
• :UPDATEلتحديث بيانات في جدول.
• :DELETEلحذف بيانات من جدول.
في تعليمة :SQL DML
• يجب بدأ كل شرط في عبارة بسطر جديد.
• يجب انتظام بداية كل شرط مع بداية الشروط الأخرى.
• إذا تألّف شرط من عدة أجزاء ،فيجب تو ُّضع هذه الأجزاء على سطور منفصلة ،كم ا يجب إض افة مس افة
بادئة لها تحت بداية الشرط لإظهار العلاقة.
• تُستخ َدم الأحرف الكبيرة لتمثيل الكلمات المحجوزة.
• تُستخ َدم الحروف الصغيرة لتمثيل الكلمات التي يُعرِّفها المستخ ِدم.
تصميم قواعد البيانات لغة معالجة البيانات DMLالخاصة بلغة SQL
13.1تعليمة SELECT
تسمح التعليمة أو الأمر SELECTللمستخ ِدم باستخراج البيانات من الجداول ،بنا ًء على معايير مح َّددة ،حيث
تُعالَج وف ًقا للتسلسل التالي:
• SELECT DISTINCTاختيار عنصر أو مجموعة عناصر.
• FROMمن جدول أو مجموعة جداول.
• WHEREيليها تعبير شرطي.
• GROUP BYيليها حقل أو مجموعة حقول.
• ORDER BYيليها مجموعة حقول.
يمكن استخدام تعليمة SELECTلإنشاء قائمة بهواتف الموظفين من جدول الموظفين ،Employeesانظر:
SELECT FirstName, LastName, phone
FROM Employees
ORDER BY LastName
س يعرض ه ذا الإج راء اس م عائل ة last nameالموظ ف ،واس مه الأول ،first nameورقم
هاتفه phone numberمن جدول الموظفين Employeesكما في الجدول التالي:
Last Name First Name Phone Number
Hagans 604-232-3232
Wong Jim 604-244-2322
Bruce
سنستخدم في المثال التالي جدول الناشرين Publishers tableالذي يم ِّثله الجدول الآتي ،حيث س تلاحظ
أ ّن كن دا Canadaمكتوب ة بطريق ة خاطئ ة في حق ل بل د الناش ر Publisher Countryالمقاب ل لحق ل اسم
الناشر " ،"Example Publishingومدينة الناشر "."ABC Publishing
Publisher Name Publisher City Publisher Province Publisher Country
Acme Publishing Vancouver BC Canada
Example Publishing Edmonton AB Cnada
ABC Publishing Toronto ON Canda
استخدم تعليمة UPDATEلتصحيح الأخطاء وتوحي د حق ل البل د ليص بح ،Canadaكم ا س نتكلم لاح ًق ا عن
تعليمة UPDATEفي هذا الفصل.
132
تصميم قواعد البيانات لغة معالجة البيانات DMLالخاصة بلغة SQL
إذا أضف َت اسم الناشر ،Publisher Nameومدينة الناشر ،Publisher Cityفستستخ ِدم تعليمة ،SELECT
ويتبعها اسم الحقول التي يُف َصل بينها بفاصلة أجنبية ،commaأي كما يلي:
SELECT PubName, city
FROM Publishers
سيؤدي هذا الإجراء إلى عرض اسم الناشر ومدينته من جدول الناشرين.
إذا أردت عرض حقل اسم الناش ر باس م حق ل المدين ة -أي تب ديل اس م الحق ل PubNameليص بح ،-city
فاستخ ِدم تعليمة SELECTمع عدم وضع فاصلة أجنبية بين Pub_Nameو ،cityأي كما يلي:
SELECT PubName city
FROM Publishers
سيعرض تنفيذ هذا الإجراء فقط الحقل PUB_NAMEمن جدول الناشرين ،بحيث يكون ل ه العن وان "."city
سيفترض SQL Serverأنك تريد وضع اسم عمود جديد للحقل PUB_NAMEإذا لم تض ّمن الفاصلة الأجنبية.
13.1.1تعليمة SELECTمع معيار WHERE
قد ترغب أحيانًا في التركيز على جزء من ج دول الناش رين ،مث ل الناش رين الموج ودين في مدين ة ف انكوفر
Vancouverفقط ،إذ ستستخدم في هذه الحالة عبارة SELECTمع معيار ،WHEREأي كما يلي:
'WHERE city = 'Vancouver
يو ِّضح المثالان الأول ّيان التاليان كيفية تحدي د اختي ار س جل م ع المعي ار WHEREباس تخدام ،BETWEENإذ
يعطي كل من هذين المثالَين نتائج تخزين العناصر نفسها التي عددها بين 20و 50عنصر في المخزن.
يستخدم المثال رقم 1الكمي ة ال تي قيمته ا بين 20و 50عنص ر م ع تض مين العنص رين 20و 50بالص ورة
التالية.qty BETWEEN 20 and 50 :
SELECT StorID, qty, TitleID
FROM Sales
ضّمن العنصرين رقم 20وWHERE qty BETWEEN 20 and 50 -- 50
يستخ ِدم المثال رقم 2الشرط .qty >=20 and qty <=50
SELECT StorID, qty, TitleID
FROM Sales
WHERE qty >= 20 and qty <= 50
يو ِّضح المثال رقم 3كيفية تحديد اختيار سجل مع المعيار WHEREباستخدام .NOT BETWEEN
133
تصميم قواعد البيانات لغة معالجة البيانات DMLالخاصة بلغة SQL
SELECT StorID, qty, TitleID
FROM Sales
WHERE qty NOT BETWEEN 20 and 50
يظهر المث الان التالي ان ط ريق َتين مختلف َتين لتحدي د اختي ار س جل م ع المعي ار WHEREباس تخدام INمع
النتائج نفسها.
يوضح المثال رقم 4كيفية اختيار السجلات باستخدام حق ل المقاطع ة provinceمن ج دول Publishers
أي = provinceعلى أساس جزء من تعليمة .WHERE
* SELECT
FROM Publishers
'WHERE province = 'BC' OR province = 'AB' OR province = 'ON
يو ِّضح المثال رقم 5كيفية اختي ار الس جلات باس تخدام المقاطع ة provinceم ع INعلى أس اس ج زء من
تعليمة :WHERE
* SELECT
FROM Publishers
)'WHERE province IN ('BC', 'AB', 'ON
يو ِّضح المثالان الأخيران كيف يمكن استخدام NULLو NOT NULLلتحديد السجلات ،ولكن سنس تخدم في
هذين المثالين جدول الكتب Books tableالغير مو َّضح هنا ،وال ذي يحت وي على حق ول ،وهي :العن وان ،Title
والكمية ،Quantityوسعر الكتاب ،Priceوكل ناشر لديه جدول كتب يعطي قائم ًة بجميع كتب الناشر.
يستخ ِدم المثال رقم 6القيمة :NULL
SELECT price, title
FROM Books
WHERE price IS NULL
يستخ ِدم المثال رقم 7القيمة :NOT NULL
SELECT price, title
FROM Books
WHERE price IS NOT NULL
134
تصميم قواعد البيانات لغة معالجة البيانات DMLالخاصة بلغة SQL
13.1.2استخدام محارف البدل wildcardsفي شرط LIKE
يح ِّدد الشرط LIKEالصفوف التي تحتوي على الحقول التي تطابق أجزا ًء محددة من سلاس ل محرفي ة ،كم ا
يُستخ َدم الشرط LIKEمع البيانات التي هي من النوع ،charو ،varcharو ،textو ،datetimeو.smalldatetime
يسمح محرف البدل wildcardللمستخ ِدم بمطابقة الحقول التي تحتوي على محارف معينة ،حيث سيعطي
محرف البدل ' province = 'N%جميع المقاطعات التي تبدأ بالمحرف .N
يو ِّضح الجدول أربعة طرائق لتحديد محارف البدل في تعليمة SELECTفي صيغة التعبير المنتظم:
نتيجة استخدامه محرف البدل wildcard
يمثل أ ّي سلسلة تتألف من صفر أو أكثر من المحارف %
_
يمثل أ ّي محرف واحد
[]
يمثل أ ّي محرف واحد ضمن مجال محدد مثل المجال
[،]a-f [^]
أو مجموعة مح َّددة مثل المجموعة []abcdef
يمثل أي محرف واحد ليس ضمن مجال محدد مثل
المجال [،]^a-f
أو مجموعة مح َّددة مثل المجموعة []^abcdef
تبحث التعليم ة ' LIKE 'Mc%في المث ال رقم 1عن جمي ع أس ماء العائل ة last namesال تي تب دأ
بالمحرفين " "Mcمثل :McBadden
SELECT LastName
FROM Employees
'WHERE LastName LIKE 'Mc%
تبحث التعليم ة ' LIKE '%ingerفي المث ال رقم 2عن جمي ع أس ماء العائل ة ال تي تنتهي
بالمحارف " ،"ingerمثل ،Ringer :و:Stringer
SELECT LastName
FROM Employees
'WHERE LastName LIKE '%inger
تبحث التعليم ة ' LIKE '%en%عن جمي ع أس ماء العائل ة ال تي تحت وي على المح رفين "،"en
مثل ،Bennett :و ،Greenو:McBadden
SELECT LastName
FROM Employees
'WHERE LastName LIKE '%en%
135
تصميم قواعد البيانات لغة معالجة البيانات DMLالخاصة بلغة SQL
13.1.3تعليمة SELECTمع الشرط ORDER BY
يُستخ َدم الشرط ORDER BYلترتيب السجلات في القائمة الناتجة ،ويمكنك استخدام ASCلترتيب النت ائج
تصاعديًا ،و DESCلترتيب النتائج تنازل ًيا.
يستخ ِدم المثال التالي :ASC
* SELECT
FROM Employees
ORDER BY HireDate ASC
يستخدم المثال التالي :DESC
* SELECT
FROM Books
ORDER BY type, price DESC
13.1.4تعليمة SELECTمع الشرط GROUP BY
يُستخ َدم الشرط GROUP BYلإنشاء خرج هو عبارة عن صف واحد لكل مجموعة ،وينتج قي ًما مو ِجز ًة للأعمدة
المح َّددة ،كما هو مو َّضح أدناه:
SELECT type
FROM Books
GROUP BY type
يستخدم المثال التالي التعليمة السابقة:
'SELECT type AS 'Type', MIN(price) AS 'Minimum Price
FROM Books
WHERE royalty > 10
GROUP BY type
إذا تضمنت تعليمة SELECTمعيار WHEREليكون السعر priceقيم ًة غير فارغة not nullكما يلي:
SELECT type, price
FROM Books
WHERE price is not null
136
تصميم قواعد البيانات لغة معالجة البيانات DMLالخاصة بلغة SQL
فستكون التعليمة التي تحتوي على شرط GROUP BYكما يلي:
'SELECT type AS 'Type', MIN(price) AS 'Minimum Price
FROM Books
WHERE price is not null
GROUP BY type
13.1.5استخدام COUNTمع GROUP BY
يمكننا استخدام COUNTلإحصاء عدد العناصر الموجودة في حاوية ،containerولكن إذا أردت حس اب ع دد
عناص ر مختلف ة في مجموع ات منفص لة مث ل رخ ام ذي أل وان مختلف ة ،فسنس تخ ِدم دال ة COUNTمع
الأمر .GROUP BY
توضح تعليمة SELECTأدناه كيفية حساب عدد مجموعات من البيانات باستخدام دالة COUNTم ع الش رط
أو الأمر :GROUP BY
)*(SELECT COUNT
FROM Books
GROUP BY type
13.1.6استخدام AVGو SUMمع GROUP BY
يمكننا استخدام دالة AVGلتعطينا متوسط أي مجموعة ،وتُستخ َدم الدالة SUMلإعطاء المجموع.
يستخ ِدم المثال رقم 1التالي دالة AVGمع الشرط :GROUP BY type
)SELECT AVG(qty
FROM Books
GROUP BY type
يستخ ِدم المثال رقم 2التالي دالة SUMمع الشرط :GROUP BY type
)SELECT SUM(qty
FROM Books
GROUP BY type
يستخ ِدم المثال رقم 3كاًل من الدالتين ،AVGو SUMمع الشرط GROUP BY typeفي تعليمة :SELECT
SELECT 'Total Sales' = SUM(qty), 'Average Sales' = AVG(qty), stor_id
FROM Sales
'GROUP BY StorID ORDER BY 'Total Sales
137
تصميم قواعد البيانات لغة معالجة البيانات DMLالخاصة بلغة SQL
13.1.7تقييد الصفوف مع HAVING
يمكن استخدام الشرط HAVINGلتقييد الصفوف ،فهو يشبه شرط WHEREباستثناء أنه يتض ّمن دالة تجمي ع
aggregate function؛ إذ لا يس تطيع الش رط WHEREفع ل ذل ك ،أي يتص رّف الش رط HAVINGمثل
الشرط ،WHEREولكنه قابل للتطبيق على المجموعات.
نستخدم في هذا المثال الشرط HAVINGلاستبعاد المجموعات التي مقاطعتها '.'BC
'SELECT au_fname AS 'Author”s First Name', province as 'Province
FROM Authors
GROUP BY au_fname, province
'HAVING province <> 'BC
13.2تعليمة INSERT
تضيف تعليمة INSERTصفو ًفا إلى جدول ،وأي ًضا ما يلي:
• تح ِّدد تعليمة INSERTالجدول أو العرض viewالتي س ُتد َخل البيانات فيه.
• تعرض Column Listقائم ًة بالأعمدة التي ستتأثر بتعليمة .INSERT
• يجب توفير كل قيمة إذا حُ ِذف عمود.
• يمكن وضع الأعمدة في قائمة ضمن أي ترتيب إذا ض ّمنتها.
• تح ِّدد الكلمة VALUESالبيانات التي تريد إدخالها في الجدول ،وتكون VALUESإلزامية).
• يجب ع دم إدراج الأعم دة ذات الخاص ية IDENTITYبص ورة ص ريحة في column_list
أو .values_clause
صيغة تعليمة INSERTهي:
]INSERT [INTO] Table_name | view name [column_list
DEFAULT VALUES | values_list | select statement
تُط َّبق القواعد التالية عند إدخال صفوف باستخدام تعليمة :INSERT
• يؤدي إدخال سلسلة فارغة (' ') في عمود من النوع ،varcharأو textإلى إدخال مسافة واحدة.
• تُح َشى جميع الأعمدة ذات النوع charعلى اليمين right-paddedلتصل إلى الطول المحدد.
• تُزال جميع المسافات الزائدة من البيانات المدرج ة في أعم دة من الن وع ،varcharباس تثناء السلاس ل
التي تحتوي على مسافات فقط ،إذ تُخت َصر هذه السلاسل إلى مسافة واحدة فقط.
138
تصميم قواعد البيانات لغة معالجة البيانات DMLالخاصة بلغة SQL
• إذا أخلَّت تعليمة INSERTبالقيد ،أو الافتراض ،أو القاع دة ،أو إذا ك ان ن وع البيان ات خاطًئا ،فستفش ل
هذه التعليمة ،وسيعرض خادم SQL Serverرسالة خطأ.
يمكن حدوث أحد الأشياء الثلاث ة التالي ة للأعم دة ال تي لا تحت وي على قيم عن د تحدي د قيم بعض الأعم دة
في column_listفقط:
.1تُد َخل قيمة افتراضية إذا كان للعمود قيد ،DEFAULTأو إذا ك ان الاف تراض مرتب ط ب العمود ،أو إذا ك ان
الافتراض مرتبط بنوع البيانات التي يعرِّفها المستخدم.
.2تُد َخل القيم ة الفارغ ة NULLفق ط إذا س مح العم ود ب القيم الفارغ ة ،ولا توج د قيم ة افتراض ية
موجودة للعمود.
.3سوف تُع َرض رسالة خطأ ويُر َفض الصف إذا ُع َرِف العمود بأن ه غ ير ف ارغ ،NOT NULLولا توج د قيم ة
افتراضية.
يستخ ِدم المثال التالي تعليمة INSERTلإضافة سجل إلى جدول الك ّتاب :Authors
INSERT INTO Authors
VALUES('555-093-467', 'Martin', 'April', '281 555-5673', '816 Market
)St.,' , 'Vancouver', 'BC', 'V7G3P4', 0
يو ِّض ح المث ال الت الي كيفي ة إدخ ال ص ف ج زئي partial rowفي ج دول الناش رِين Publishersمع
قائمة أعمدة.
يملك عمود الدولة countryقيمة افتراضية هي ،Canadaلذلك لا يلزمك تضمينه في قيمك.
)INSERT INTO Publishers (PubID, PubName, city, province
)'VALUES ('9900', 'Acme Publishing', 'Vancouver', 'BC
اتبع المثال التالي لإدخال صفوف في جدول مع عم ود ،IDENTITYولا تعطي قيم ًة للعم ود ،IDENTITY
ولا قيم ًة لاسم العمود ضمن قائمة الأعمدة.
INSERT INTO jobs
)VALUES ('DBA', 100, 175
13.2.1إدخال قيم محددة ضمن عمود IDENTITY
لا يمكن إدخال البيانات مباشرة في عمود IDENTITYافتراض ًيا ،ولكن إذا حُ ِذف ص ف خط ًأ ،أو إذا ك انت
هناك ثغرات في قيم عمود ،IDENTITYفيمكنك إدخال صف وتحديد قيمة العمود .IDENTITY
IDENTITY_INSERT option
139
تصميم قواعد البيانات SQL الخاصة بلغةDML لغة معالجة البيانات
: مح َّددةidentity على النحو التالي للسماح بإدخال قيمة هويةIDENTITY_INSERT يمكن استخدام
SET IDENTITY_INSERT jobs ON
INSERT INTO jobs (job_id, job_desc, min_lvl, max_lvl)
VALUES (19, 'DBA2', 100, 175)
SET IDENTITY_INSERT jobs OFF
SELECT إدخال صفوف باستخدام عبارة13.2.2
.SELECT لذلك يمكننا إدخال صفوف مع تعليمة،يمكننا إنشاء جدول مؤقت صغير من جدول كبير
ق د يك ون هن اك العدي د من، وبالت الي، عند استخدام ه ذا الأم رuniqueness لا يوجد تحقق لصحة التفرد
. نفسه في المثال التاليpub_id الصفوف بالمعرّف
أص غر باس تخدام تعليم ة إنش اءtmpPublishers مؤقت هوPublishers ين ِشئ هذا المثال جدول ناشرِين
لإض افة س جلات إلى ج دولSELECT م ع تعليم ةINSERT ثم تُس تخ َدم تعليم ة،CREATE TABLE ج دول
.Publishers الناشرِين المؤقت من جدول الناشرين
CREATE TABLE dbo.tmpPublishers (
PubID char (4) NOT NULL ,
PubName varchar (40) NULL ,
city varchar (20) NULL ,
province char (2) NULL ,
country varchar (30) NULL DEFAULT ('Canada')
)
INSERT tmpPublishers
SELECT * FROM Publishers
:ننسخ في هذا المثال مجموع ًة فرعي ًة من البيانات
INSERT tmpPublishers (pub_id, pub_name)
SELECT PubID, PubName
FROM Publishers
:Canada إلى القيمةcountry ويُض َبط عمود الدولةtmpPublishers تُن َسخ بيانات الناشرين هنا إلى جدول
INSERT tmpPublishers (PubID, PubName, city, province, country)
SELECT PubID, PubName, city, province, 'Canada'
FROM Publishers
140
تصميم قواعد البيانات لغة معالجة البيانات DMLالخاصة بلغة SQL
13.3تعليمة UPDATE
تغ ّي ر تعليم ة UPDATEالبيان ات في الص فوف الموج ودة إم ا بإض افة بيان ات جدي دة أو بتع ديل البيان ات
الموجودة ساب ًقا.
يستخ ِدم المثال التالي تعليمة UPDATEلتوحيد حقل الدولة countryليكون Canadaلجميع الس جلات في
جدول :Publishers
UPDATE Publishers
'SET country = 'Canada
يزيد المثال التالي مبالغ حقوق المؤلف royaltyالتي قيمتها بين 10و 20بنسبة :%10
UPDATE roysched
)SET royalty = royalty + (royalty * .10
WHERE royalty BETWEEN 10 and 20
13.3.1تضمين استعلامات فرعية subqueriesضمن عبارة UPDATE
يُم َنح الموظف ون في ج دول الم وظفين Employeesال ذين و ّظفهم الناش ر في ع ام 2010ترقي ًة إلى أعلى
مستوى وظيفي حسب نوع عملهم كما يلي:
UPDATE Employees
= SET job_lvl
(SELECT max_lvl FROM jobs
)WHERE employee.job_id = jobs.job_id
WHERE DATEPART(year, employee.hire_date) = 2010
13.4تعليمة DELETE
تزيل تعليمة DELETEصفو ًفا من مجموعة س جلات ،كم ا تح ِّدد عب ارة DELETEالج دول أو الع رض view
الذي يحوي الصفوف التي س ُتح َذف ،ويمكن إدراج جدول أو صف واحد فقط في الوقت نفسه.
يُ َع ّد الشرط WHEREالمعيار الذي يح ِّدد السجلات المراد حذفها ،وتكون صيغة تعليمة DELETEكما يلي:
} DELETE [FROM] { table_name | view_name
][WHERE clause
141
تصميم قواعد البيانات لغة معالجة البيانات DMLالخاصة بلغة SQL
قواعد تعليمة DELETEهي:
.1إذا حُ ِذف شرط WHEREفس ُتزال جمي ع الص فوف الموج ودة في الج دول باس تثناء الفه ارس ،indexes
والجدول ،والقيود.
.2لا يمكن استخدام عبارة DELETEبعرض viewيحتوي على شرط FROMيس ّمي أك ثر من ج دول واح د،
فتعليمة DELETEيمكن أن تؤثر على جدول أساسي فقط في الوقت نفسه.
فيما يلي ثلاث تعليمات DELETEمختلفة يمكن استخدامها:
• حذف جميع الصفوف من جدول:
DELETE
FROM Discounts
• حذف صفوف مح َّددة:
DELETE
FROM Sales
'WHERE stor_id = '6380
• حذف صفوف بنا ًء على قيمة ضمن استعلام فرعي:
DELETE FROM Sales
WHERE title_id IN
)'(SELECT title_id FROM Books WHERE type = 'mod_cook
13.5الدوال المبنية مسبقا Built-in Functions
يوجد العديد من الدوال المبنية مسب ًقا في ،SQL Serverمثل:
.1دوال التجميع :Aggregateترجع قي ًما مو ِجزة .summary values
.2دوال التحويل :Conversionتح ِّول نوع بيانات معين إلى نوع آخر.
.3دوال التاريخ :Dateتعرض معلومات عن التواريخ والأوقات.
.4الدوال الرياضية :Mathematicalتجري عمليات على البيانات العددية.
.5الدوال المتعلِّقة بالسلاسل :Stringتجري عمليات على سلاسل المح ارف ،أو على البيان ات الثنائي ة ،أو
على التعابير.
.6الدوال المتعلِّقة بالنظام :Systemترجع معلومات من قاعدة البيانات.
142
تصميم قواعد البيانات لغة معالجة البيانات DMLالخاصة بلغة SQL
.7الدوال المتعلِّقة بالنصوص ،Textوالص ور :imageتج ري عملي ات على بيان ات نص ية ،أو على بيان ات
الصور.
سنشرح أدناه الدوال الأربع الأولى شر ًحا مف َّصاًل مع أمثلة عنها.
13.5.1دوال التجميع Aggregate functions
تجري دوال التجميع حسابات على مجموعة من القيم ،وترجع قيم ًة واحد ًة أو قيم ًة مو ِجز ًة.
يعرض الجدول التالي هذه الدوال:
وصفها الدالة FUNCTION
ترجع متوسط averageجميع القيم ،أو القيم المميزة AVG
DISTINCTفقط ،ضمن التعبير
ترجع عدد القيم غير الفارغة في التعبير ،وإذا استخ ِدم COUNT
التمايز DISTINCTفستجد الدالة COUNTعدد القيم
غير الفارغة الفريدة
ترجع عدد الصفوف ،ولا تأخذ الدالة (*)COUNT (*)COUNT
معاملات ،كما لا يمكن استخدام التمايز DISTINCT
معها
ترجع القيمة العليا في التعبير ،ويمكن استخدام الدالة MAX
Maxمع الأعمدة ذات النوع العددي ،والمحرفي،
والأعمدة ذات النوع ،datetimeولكنها لا تُستخ َدم مع
الأعمدة ذات النوع ،bitكما تعطي الدالة MAXمع
الأعمدة المحرفية أعلى قيمة في تسلسل مرتَّب،
وتتجاهل هذه الدالة القيم الفارغة
ترجع القيمة الدنيا في التعبير .يمكن استخدام الدالة MIN
MINمع أعمدة عددية ،ومحرفية ،وذات النوع
،datetimeولكنها لا تُستخ َدم مع أعمدة لها النوع ،bit
كما تعطي الدالة MINمع الأعمدة المحرفية أعلى قيمة
في تسلسل مرتَّب ،وتتجاهل هذه الدالة القيم الفارغة
ترجع مجموع كل القيم ،أو فقط القيم المميزة SUM
DISTINCTفي التعبير ،ويمكن استخدام الدالة SUM
مع الأعمدة العددية فقط
سنعرض فيما يلي أمثل ًة عن كل من دوال التجميع الموجودة في الجدول السابق.
• المثال الأول :الدالة AVG
'SELECT AVG (price) AS 'Average Title Price
FROM Books
143
تصميم قواعد البيانات SQL الخاصة بلغةDML لغة معالجة البيانات
COUNT الدالة:• المثال الثاني
SELECT COUNT(PubID) AS 'Number of Publishers'
FROM Publishers
COUNT الدالة:المثال الثالث
SELECT COUNT(province) AS 'Number of Publishers'
FROM Publishers
COUNT )*( الدالة:• المثال الرابع
SELECT COUNT(*)
FROM Employees
WHERE job_lvl = 35
MAX الدالة:• المثال الخامس
SELECT MAX (HireDate)
FROM Employees
MIN الدالة:• المثال السادس
SELECT MIN (price)
FROM Books
SUM الدالة:• المثال السابع
SELECT SUM(discount) AS 'Total Discounts'
FROM Discounts
Conversion function دالة التحويل13.5.2
.تح ّول دالة التحويل نوع بيانات معين إلى نوع بيانات آخر
حيث تك ون، إلى خمسة مح ارف في المث ال الآتي99 الذي يحتوي ضمنه على تسعتينprice يُح َّول السعر
:صيغة التعليمة بالصورة التالية
SELECT 'The date is ' + CONVERT(varchar(12), getdate())
:إليك مثال
144
تصميم قواعد البيانات لغة معالجة البيانات DMLالخاصة بلغة SQL
)SELECT CONVERT(int, 10.6496
SELECT title_id, price
FROM Books
'WHERE CONVERT(char(5), price) LIKE '%99%
تغ ِّير دالة التحويل في المثال التالي البيانات إلى نوع بيانات بحجم مختلف:
'SELECT title_id, CONVERT(char(4), ytd_sales) as 'Sales
FROM Books
'WHERE type LIKE '%cook
13.5.3دالة التاريخ Date function
تُنتج دال ة الت اريخ تاريخً ا عن طري ق إض افة فاص ل زم ني إلى ت اريخ مح َّدد ،والنتيج ة هي قيم ة لها
نوع ،datetimeوتساوي التاريخ مضا ًفا إليه عدد أجزاء التاريخ .date parts
إذا ك ان معام ل دال ة الت اريخ قيم ًة من الن وع ،smalldatetimeفس تكون النتيج ة قيم ًة من
النوع smalldatetimeأي ًضا.
تُستخ َدم الدالة DATEADDلإضافة وزيادة قيم التاريخ ،وصيغة هذه الدالة هي:
)DATEADD(datepart, number, date
إليك مثال:
)SELECT DATEADD(day, 3, hire_date
FROM Employees
يستخ ِدم المثال الآتي الدالة ( ،DATEDIFF(datepart, date1, date2ويعيد هذا الأمر ع دد أج زاء
التاريخ أو "الحدود" boundariesالمتقاطعة بين تاريخَين محددين.
تجعل طريقة حساب الحدود المتقاطعة النتيجة التي أعطته ا الدال ة DATEDIFFمتوافق ة م ع جمي ع أن واع
البيانات ،مثل الدقائق ،والثواني ،والميلي ثانية.
)'SELECT DATEDIFF(day, HireDate, 'Nov 30 1995
FROM Employees
يمكننا فحص أي جزء من تاريخ مع َّين من السنة إلى الميلي ثانية.
يع رض الج دول الت الي أج زاء الت اريخ ،DATEPARTواختص اراتها ،وقيمه ا المقبول ة ال تي يع ترف بها
خادم .SQL Server
145
تصميم قواعد البيانات لغة معالجة البيانات DMLالخاصة بلغة SQL
قيمه VALUES اختصاره ABBREVIATION جزء التاريخ DATE PART
1753-9999 yy Year
1-4 qq
1-12 mm Quarter
1-366 dy Month
1-31 dd Day of year
1-53 wk
dw Day
)1-7 (Sun.-Sat. hh Week
0-23 mi Weekday
0-59 ss Hour
0-59 ms Minute
0-999 Second
Millisecond
13.5.4الدوال الرياضية Mathematical functions
تجري الدوال الرياضية عمليات على البيانات العددية ،ويعرض المثال التالي السعر الحالي لكل كتاب يبيع ه
الناشر ،كما يعرض ما سيكون عليه الأمر إذا ارتفعت جميع الأسعار بنسبة :%10
SELECT Price, (price * 1.1) AS 'New Price', title
FROM Books
)SELECT 'Square Root' = SQRT(81
)SELECT 'Rounded' = ROUND(4567.9876,2
)SELECT FLOOR (123.45
13.6ضم الجداول Joining Tables
يُ َع ّد ضم جدولين أو أكثر مثل عملية موازنة بيانات ضمن أعمدة مح َّددة ،واس تخدام نت ائج الموازن ة لتش كيل
جدول جديد من الصفوف المؤهلة لذلك.
تقوم عبارة الضم joinبما يلي:
• تح ِّدد عمو ًدا من كل جدول.
• توازن القيم الموجودة في تلك الأعمدة ص ًفا ص ًفا.
• تدمج الصفوف ذات القيم المؤهلة ضمن صف جديد.
تكون الموازنة عاد ًة مساوا ًة -أي القيم التي تتطابق مع بعضها البعض تما ًما ،-ولكن يمكن تحدي د أن واع ض م
أخرى أي ًضا.
146
تصميم قواعد البيانات لغة معالجة البيانات DMLالخاصة بلغة SQL
سنشرح جميع أنواع الضم المختلف ة أدن اه ،مث ل :الض م ال داخلي ،innerواليس اري (الخ ارجي) ،واليمي ني
(الخارجي) ،والضم المتقاطع .cross join
13.6.1الضم الداخلي Inner join
يربط الضم الداخلي جدولين في عمود له نفس نوع البيانات ،وينتج الصفوف التي تتطابق فيها قيم العم ود
فقط ،حيث يجري تجاهل الصفوف التي لا مثيل لها.
المثال الأول:
SELECT jobs.job_id, job_desc
FROM jobs
INNER JOIN Employees ON emp
loyee.job_id = jobs.job_id
WHERE jobs.job_id < 7
المثال الثاني:
SELECT authors.au_fname, authors.au_lname, books.royalty, title
FROM authorsINNER JOIN titleauthor ON authors.au_id=titleauthor.au_id
INNER JOIN books ON titleauthor.title_id=books.title_id
GROUP BY authors.au_lname, authors.au_fname, title, title.royalty
ORDER BY authors.au_lname
13.6.2الضم اليساري الخارجي Left outer join
ينتج عن الضم الخارجي اليساري كل الصفوف الخارجي ة اليس رى ،إذ تُض َّمن جمي ع الص فوف من الج دول
الأيسر التي لا تح ّقق الشرط المح ّدد في مجموعة النتائج ،وتُض َبط أعم دة الخ رج من الج دول الآخ ر على القيم ة
الفارغة .NULL
يستخ ِدم المثال التالي الصيغة الجديدة للضم اليساري الخارجي:
SELECT publishers.pub_name, books.title
FROM Publishers
LEFT OUTER JOIN Books On publishers.pub_id = books.pub_id
بينما يستخ ِدم المثال التالي الصيغة القديمة للضم الخارجي اليساري:
147
تصميم قواعد البيانات SQL الخاصة بلغةDML لغة معالجة البيانات
SELECT publishers.pub_name, books.title
FROM Publishers, Books
WHERE publishers.pub_id *= books.pub_id
Right outer join الضم الخارجي الأيمن13.6.3
يت ّضمن الضم الخارجي الأيمن في مجموعة النتائج الخاص ة ب ه كاف ة الص فوف من الج دول الأيمن ال تي لا
.NULL وتُض َبط أعمدة الخرج المقابلة من الجدول الآخر على القيمة الفارغة،تح ّقق الشرط المح ّدد
:يستخ ِدم المثال التالي الصيغة الجديدة للضم الخارجي الأيمن
SELECT titleauthor.title_id, authors.au_lname, authors.au_fname
FROM titleauthor
RIGHT OUTER JOIN authors ON titleauthor.au_id = authors.au_id
ORDERY BY au_lname
:بينما يو ِّضح المثال التالي الصيغة القديمة المستخ َدمة للضم الخارجي الأيمن
SELECT titleauthor.title_id, authors.au_lname, authors.au_fname
FROM titleauthor, authors
WHERE titleauthor.au_id =* authors.au_id
ORDERY BY au_lname
Full outer join الضم الخارجي الكامل13.6.4
،يح ِّدد الضم الخ ارجي الكام ل أن ه في حال ة ع دم تط ابق ص ف من أي من الج دولين م ع مع ايير التحدي د
وتُض َبط أعمدة الخ رج الخاص ة ب ه ال تي تتواف ق م ع الج دول الآخ ر إلى،فس ُيض َّمن الصف في مجموعة النتائج
.NULL القيمة الفارغة
:فيما يلي مثال عن ضم خارجي كامل
SELECT books.title, publishers.pub_name, publishers.province
FROM Publishers
FULL OUTER JOIN Books ON books.pub_id = publishers.pub_id
WHERE (publishers.province <> “BC” and publishers.province <> “ON”)
ORDER BY books.title_id
148
تصميم قواعد البيانات لغة معالجة البيانات DMLالخاصة بلغة SQL
13.6.5الضم المتقاطع Cross join
الضم المتقاطع هو ناتج دمج جدولين ،وينتج عن هذا الضم ص فوف حال ة ع دم اس تخدام الش رط WHERE
نفسها ،أي كما يلي:
SELECT au_lname, pub_name,
FROM Authors CROSS JOIN Publishers
13.7مصطلحات أساسية
• دالة التجميع :aggregate functionتعيد قي ًما مو ِجزة.
• :ASCترتيب تصاعدي.
• دالة التحويل :conversion functionتح ّول نوع بيانات مع َّين إلى نوع بيانات آخر.
• الضم المتقاطع :cross joinناتج دمج جدولين.
• دالة التاريخ :date functionتعرض معلومات عن التواريخ والأوقات.
• تعليمة :DELETEتزيل صفو ًفا من مجموعة سجلات.
• :DESCترتيب تنازلي.
• الضم الخارجي الكامل :full outer joinيح ِّدد الحالة التي لا يتطابق فيها صف من أي جدول مع
معايير الاختيار.
• :GROUP BYوهي تُستخ َدم من أجل إنشاء صف خرج واحد لكل مجموعة ،وتنتج قي ًما مو ِجز ًة
للأعمدة المختارة.
• الضم الداخلي :inner joinيربط جدولين من خلال عمود له نوع البيانات نفسه.
• تعليمة :INSERTيضيف صفو ًفا إلى جدول.
• الضم الخارجي اليساري :left outer joinيُن ِتج جميع الصفوف الخارجية اليسرى.
• الدالة الرياضية :mathematical functionتجري عمليات على البيانات العددية.
• الضم الخارجي اليميني :right outer joinيتضمن جميع الصفوف من الجدول الأيمن الذي لم يحقق
الشرط المح َّدد.
• تعليمة :SELECTتُستخ َدم للاستعلام عن البيانات في قاعدة البيانات.
149
تصميم قواعد البيانات لغة معالجة البيانات DMLالخاصة بلغة SQL
• الدالة المتعلِّقة بالسلاسل :string functionتجري عمليات على سلاسل المحارف ،أو البيانات
الثنائية ،أو التعابير.
• الدالة المتعلِّقة بالنظام :system functionتعيد معلومات من قاعدة البيانات.
• الدوال المتعلقة بالنصوص والصور :text and image functionsتجري عمليات على البيانات
النصية وبيانات الصور.
• تعليمة :UPDATEتغ ّير البيانات في الصفوف الموجودة إما بإضافة بيانات جديدة ،أو بتعديل
البيانات الموجودة.
• محرف البدل :wildcardيسمح للمستخ ِدم بمطابقة الحقول التي تحتوي على محارف معينة.
13.8تمارين
استخ ِدم نموذج قاعدة البيانات PUBSالذي أنشأته مايكروسوفت لحل لأسئلة التالية:
.1اعرض قائم ًة بتواريخ النشر والعناوين (الكتب) التي نُشرِت في عام .2011
.2اعرض قائم ًة بعناوين الكتب ال ُمص َّنفة على أساس كتب طبخ تقلي دي ،أو كتب طبخ ح ديث باس تخدام
جدول الكتب .Books
.3اعرض جميع المؤلفين authorsالذين تتألف أسماؤهم الأولى من خمسة أحرف.
.4اع رض من ج دول الكتب :الن وع ،typeوالس عر ،priceوالمع رِّف ،Pub_idوعن وان titleالكتب ال تي
وضعها كل ناشر ،ثم أ ِع ْد تسمية عمود النوع typeليصبح فئة الكت اب ،Book Categoryورتّب ه حس ب
النوع typeتنازل ًيا ،ثم حسب السعر priceتصاعديًا.
.5اع رض الحق ل ،title_idوالحق ل ،pubdateوالحق ل pubdateمض ا ًفا إلي ه ثلاث ة أي ام ،باس تخدام
جدول الكتب.
.6ح ِّدد باستخدام الدالتين ،datediffو getdateمقدار الوقت المنقضي (مق َّد ًرا بالأشهر) من ذ نش ر الكتب
في جدول الكتب.
.7اع رض قائم ًة بمعرِّف ات العن اوين ،title IDوكمي ة quantityجمي ع الكتب ال تي بي ع منه ا أك ثر
من 30نسخة.
.8اعرض قائم ًة بجميع أسماء عائلات الم ؤلفين ال ذين يعيش ون في أونت اريو - Ontarioأو ONاختص ا ًرا،-
والمدن التي يعيشون فيها.
150