ريظانملا - hama-univ.edu.sy€¦ · eng. hana sabbagh page 2 of 7 ريظانملا 4

70
Eng. Hana Sabbagh Page 1 of 7 جلسة الهدف من ال في نهايةذه هجلسة ال سكون ن قد تعرفنا إنشاء قاعدة بيانات. على كيفيةلمفتاحيةت اكلما ال1 . قاعدة بياناتDatabase 2 . جدولTable 3 . جدول مؤقتTemporary Table 4 . منظارView 5 . فهرسIndex 6 . ق ادحTrigger 7 . ئيات اجرا مخزنةStored Procedure 8 . التوابعFunction قواعد الامل مع التع بيانات تعريف يمكن تعريفعدة ال قا بياناتها بنية منطقية على أنLogical Structure ل برنامجرتها من قبتم إدا ت محرك قواعد الص نطلق عليه اسم متخص بياناتDatabase Engine هذا المحركث يقوم بحي بإنشاءائيةزيات في عدة ملفكل قاعدة موافقة ل ليقوم هذا التخزينرة عمليات بإدالمحرك بعدها ات المخزنة فيلبيانا لتعديلم والحذف والستع واذه هملفات الل كامل. بشكغراضى العديد من ا قاعدة بيانات عل تحوي كلDatabase Objects غذه ان أهم ه وم راض:1 . جداول ال2 . القيود3 . لفهارس ا

Upload: others

Post on 19-Oct-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 1 of 7

الهدف من الجلسة

على كيفية إنشاء قاعدة بيانات. تعرفنا قد نكونس الجلسة هذه نهاية في

الكلمات المفتاحية

Database بياناتقاعدة .1

Tableجدول .2

Temporary Tableجدول مؤقت .3

Viewمنظار .4

Indexفهرس .5

Triggerادح ق .6

Stored Procedureمخزنة اجرائيات .7

Functionالتوابع .8

بياناتالتعامل مع قواعد ال

تعريف

تتم إدارتها من قبل برنامج Logical Structureعلى أنها بنية منطقية بياناتقاعدة اليمكن تعريف

بحيث يقوم هذا المحرك Database Engine بياناتمتخصص نطلق عليه اسم محرك قواعد ال

المحرك بعدها بإدارة عمليات التخزين ليقوم هذاموافقة لكل قاعدة عدة ملفات فيزيائية بإنشاء

بشكل كامل. الملفات هذه واالستعالم والحذف والتعديل للبيانات المخزنة في

راض:ومن أهم هذه األغ Database Objectsتحوي كل قاعدة بيانات على العديد من األغراض

الجداول .1

القيود .2

الفهارس .3

Page 2: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 2 of 7

المناظير .4

المؤقتةالجداول .5

المخزنة االجرائيات .6

من قبل المستخدمالتوابع المعرفة .7

القادحات .8

عبر لغة برمجية موحدة هي لغة االستعالمات بياناتيتم التواصل مع مختلف محركات قواعد ال

الالزمة للتعامل مع قواعد البيانات ومختلف وهي اللغة التي تسمح لنا بكتابة التعليمات SQLالمهيكلة

أغراضها.

بياناتالبنية الفيزيائية لقاعدة ال

المدارة من قبل المحرك بياناتشرح لمحة موجزة للبنية الفيزيائية لقواعد ال سنقتصر على

Microsoft SQL Server "أو )سنطلق عليه من اآلن وصاعدا اسم "محرك مايكروسوفت

اختصارا( حيث تختلف البنية الفيزيائية الموافقة لكل قاعدة ما بين محرك وآخر.محرك البيانات

ي محرك مايكروسوفت من الملفات التالية:تتكون كل قاعدة بيانات ف

: Primary Filesالملفات األساسية .1

(mdf)ملف الحقته وواحد فقطيجب أن تحتوي أي قاعدة بيانات على ملف أساسي واحد طلق عليه اسم البيانات السامية ويحوي هذا الملف البيانات األساسية لقاعدة البيانات أو ما ن

التي تشتمل على تعاريف مختلف األغراض المخزنة في قاعدة Metadataلقاعدة البيانات

البيانات. كما يمكن للملف األساسي أن يحوي أي عدد من أغراض قاعدة البيانات. إن احتواء

هذا الملف على البيانات السامية للقاعدة يجعل من سالمة هذا الملف أمرا جوهريا لضمان

هذا الملف للعطب ألي سبب من األسباب يجعل القاعدة عمل القاعدة الموافقة وإن تعرض

الموافقة معطوبة ويكون من الصعب، ومن المستحيل أحيانا، إصالحها.

من محرك مايكروسوفت إمكانية إضافة عدة ملفات أساسية لنفس 2112سمح اإلصدار

القاعدة حيث يقوم المحرك عندها بتخزين البيانات السامية في أول ملف منها.

Secondary Filesلملفات الثانوية ا .2

يمكن ألي قاعدة بيانات أن تحوي ملف ثانوي واحد أو أكثر وهي ملفات مخصصة لتخزين

بيانات أغراض قاعدة البيانات )بيانات الجداول والفهارس على سبيل المثال( ولكنها ال

.ndfتحوي على بيانات سامية. الحقة هذه الملفات

Transaction Log Filesملفات المناقالت .3وهي ملفات لتخزين تسلسل العمليات المنفذة على القاعدة ونسخ البيانات قبل وبعد أي عملية.

تتميز هذه الملفات بصغر حجمها عموما األمر الذي يسرع من عمليات القراءة والكتابة فيها

مرتبة حتى مقارنة بالملفات األساسية والثانوية التي قد تكون ذات حجوم كبيرة تصل

التيرابايت. يقوم المحرك بتخزين أي عملية نقوم بها على ملف المناقالت )تخزين مؤقت(

Page 3: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 3 of 7

ليقوم بنقله تلقائيا إلى ملفات البيانات )تخزين دائم( بشكل دوري )دون أي تدخل من

من جهة ومن جهة بياناتالمستخدم(. تساعد هذه الملفات بتسريع عمليات التعامل مع قواعد ال

ح باسترجاع جميع البيانات المفقودة الناتجة عن توقف المحرك بشكل مفاجئ أخرى تسم

نتيجة النقطاع التيار الكهربائي أو أي عطل آخر للمخدم.

تحوي أي قاعدة بيانات على ملف مناقالت واحد على األقل وفي حال وجود عدة ملفات يتم

في الملف الثاني حتى يمتلئ التخزين فيها تسلسليا أي بعد ملئ الملف األول يخزن المحرك

من بداية الملف األول )مع قوم المحرك بعدها بالتخزين بدءا وهكذا حتى يمتلئ آخر ملف لي

حذف أي معلومات سابقة مخزنة فيه(.

وتعديلها Drop Databaseوحذفها بالتعليمة Create Databaseيتم إنشاء قاعدة بيانات بالتعليمة

وسنعرض فيما يلي أمثلة عن اإلنشاء بأشكاله المختلفة إضافة إلى مثال . Alter Databaseبالتعليمة

عن الحذف.

إنشاء قاعدة بيانات

إنشاء قاعدة بيانات باإلعدادات االفتراضية .1

أبسط طريقة إلنشاء قاعدة بيانات هي باستخدام اإلعدادات االفتراضية للمخدم وفيها ال نحدد أي

بإنشاء الملفات األساسية الكافية لعمل هذه القاعدة.ملفات ليقوم عندها المخدم تلقائيا

باإلعدادات االفتراضية. التعليمة الموافقة: HelloDBلنفترض أننا نريد إنشاء قاعدة اسمها

Create Database HelloDB

يقوم المخدم تلقائيا بإنشاء ملفين موافقين للقاعدة الجديدة بحيث يشتق اسم هذين الملفين من اسم

القاعدة وهذين الملفين هما:

ميغابايت وحجم نهائي غير محدود 3بحجم أولي مقداره HelloDB.mdfالملف الرئيسي .1

ميغابايت. 1ومعدل نمو مقداره

ميغابايت وحجم نهائي غير 1بحجم أولي مقداره HelloDB_Log.ldfملف المناقالت .2

الملف.من الحجم الحالي لهذا %11محدود ومعدل نمو مقداره

الواقع ضمن مسار تثبيت محرك MSSQL/DATAيتم إنشاء الملفات السابقة ضمن المجلد

قواعد البيانات.

إنشاء قاعدة بيانات ضمن مجلد خاص مع تسمية الملفات المكونة لها .2بحيث تكون ملفاتها مخزنة على Salesلنفترض أننا نريد أن ننشئ قاعدة بيانات منطقية اسمها

MySales. نريد أن تحوي هذه القاعدة على ملف أساسي وحيد اسمه C:\dataالمسار الفيزيائي

.MySalesLogوملف مناقالت وحيد اسمه

CREATE DATABASE Sales

Page 4: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 4 of 7

ON

( NAME = Sales_dat,

FILENAME = 'c:\data\MySales.mdf',

SIZE = 10,

MAXSIZE = UNLIMITED,

FILEGROWTH = 5 )

LOG ON

( NAME = 'Sales_log',

FILENAME = 'c:\data\MySalesLog.ldf',

SIZE = 5MB,

MAXSIZE = 25MB,

FILEGROWTH = 10% )

نالحظ أن لكل ملف العديد من المواصفات أهمها:

اسم لالستخدام وهو NAMEالذي تحدده الواصفة Logical Nameاالسم المنطقي .1

المنطقي للملف ضمن المحرك بصرف النظر عن اسمه الفيزيائي ومكان تخزينه

وتحوي المسار FileNameوهو ما تحدده الواصفة File Nameاالسم الفيزيائي للملف .2

الكامل للملف.

ويمثل الحجم األولي المحجوز للملف مقدرة افتراضيا Sizeالحجم البدائي للملف .3

بالميغابايت.

مقدرة بالميغابايت، وإذا MaxSizeوهو ما تحدده الواصفة Max Sizeالحجم األعظمي .4

لنسمح Unlimitedأردنا أن يكون حجم هذا الملف غير محدودا نستخدم القيمة الخاصة

. FileGrowthللملف بالنمو تلقائيا بما تحدده الواصفة

يمكن أن تكون تيوال FileGrowthوهو ما تحدده الواصفة File Growthمعدل النمو .5

إما مطلقة أو نسبية. تتم زيادة حجم الملف بعد امتالء الحجم الحالي كامال بالبيانات اقيمته

ويتم حساب الحجم الجديد وفق إحدى القاعدتين:i. إذا كان النمو مطلقا: الحجم الجديد = الحجم الحالي + معدل النمو

ii. معدل النمو(+ 1= الحجم الحالي * )إذا كان النمو نسبيا: الحجم الجديد تنمو جميع ملفات البيانات نموا متجانسا بحيث يتم التخزين بشكل يتناسب مع حجوم كل

من هذه الملفات.

إنشاء قاعدة بيانات بعدة ملفات بيانات ومناقالت .3

ملفات 3ولتحوي C:\Dataبحيث تكون جميع ملفاتها ضمن المسار Archiveنريد إنشاء القاعدة

:ملف مناقالت لتكون بالواصفات التالية 2رئيسية و

ملفات البيانات

معدل النمو الحجم األعظمي الحجم األولي االسم الفيزيائي االسم المنطقي

Arch1 ArcData1.mdf 11 MB 5 غير محدود MB

Arch2 ArcData2.ndf 5 MB 15 MB 3 MB

Arch3 ArcData3.ndf 3 MB 12 MB 21%

Page 5: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 5 of 7

المناقالت ملفات

معدل النمو الحجم األعظمي الحجم األولي االسم الفيزيائي االسم المنطقي

ArcLog1 ArcLog1.ldf 5 MB 11 MB 2 MB

ArchLog2 ArcLog2.ldf 5 MB 21 MB 5 MB

اإلنشاء الموافقة: تعليمة

CREATE DATABASE Archive

ON

( NAME = Arch1,

FILENAME = 'c:\data\archdat1.mdf',

SIZE = 10MB,

MAXSIZE = UNLIMITED,

FILEGROWTH = 5

),

( NAME = Arch2,

FILENAME = 'c:\data\archdat2.ndf',

SIZE = 5MB,

MAXSIZE = 15,

FILEGROWTH = 3

),

( NAME = Arch3,

FILENAME = 'c:\data\archdat3.ndf',

SIZE = 3MB,

MAXSIZE = 12,

FILEGROWTH = 20%

)

LOG ON

( NAME = Archlog1,

FILENAME = 'c:\data\archlog1.ldf',

SIZE = 5MB,

MAXSIZE = 10,

FILEGROWTH = 2),

( NAME = Archlog2,

FILENAME = 'c:\data\archlog2.ldf',

SIZE = 5MB,

MAXSIZE = 20,

FILEGROWTH = 5

)

Page 6: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 6 of 7

حذف قاعدة بيانات

نستخدم السابقة البيانات قاعدة فذلح. Drop Database التعليمة نستخدم بيانات قاعدة أي لحذف

:التالي األمر

Drop Database HelloDB

التعديل على قاعدة البيانات

:إلضافة ملف جديد -1

ALTER DATABASE <database name>

ADD FILE

([NAME = <’logical file name’>,]

FILENAME = <’file name’>

[, SIZE = <size in KB, MB, GB or TB>]

[, MAXSIZE = < size in KB, MB, GB or TB >]

[, FILEGROWTH = <No of KB, MB, GB or TB |percentage>]) [,...n]

[ TO FILEGROUP filegroup_name]

مثال:

ALTER DATABASE mouhannad

ADD FILE

(NAME = 'mAdd',

FILENAME = 'C:\Data\Datasample_database_add.mdf',

SIZE =11)

TO FILEGROUP [sample_database_filegroup1]

لتعديل حجم ملف: -2

ALTER DATABASE mouhannad

Page 7: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 7 of 7

MODIFY FILE

(NAME = mAdd,

SIZE = 21MB)

أما لقيمة أصغر فيعطي خطأ.مالحظة: تعديل احلجم لقيمة أكرب من احلالية

تغيير اسم قاعدة بيانات

NewHelloDbإلى HelloDb. مثال لتغيير اسم القاعدة SP_RenameDbنستخدم تابع النظام

ننفذ األمر التالي:

sp_renamedb 'HelloDb','NewHelloDb'

قواعد البيانات ملفات تعليمات االستعالم على

وملفات كل منها الحالي المحركقائمة بأسماء القواعد المدارة على .1الذي يعيد قائمة بجميع القواعد المخدمة من المحرك الحالي SP_HelpDBنستخدم تابع النظام

نستخدم نفس HelloDBللحصول على معلومات خاصة بقاعدة محددة ولتكن ومع حجم كل منها

دة المطلوبة كما يلي:التابع السابق ونمرر له اسم القاع

sp_helpdb HelloDb

قائمة ملفات قاعدة البيانات الحالية .2

الذي يعرض بيانات مختلف القاعدة الحالية SP_HelpFileنستخدم تابع النظام

use HelloDb

go

sp_helpfile

sp_helpfile HelloDB_Log

ذا أردنا عرض إو HelloDBيقوم هذا التابع بدون أي متحوالت بعرض بيانات ملفات القاعدة الحالية

بيانات ملف محدد من ملفات هذه القاعدة فنمرر االسم المنطقي لهذا الملف كمتحول لتابع النظام.

انتهت المحاضرة

Page 8: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 1 of 5

اهلدف من اجللسة على كيفية إنشاء اجلداول. تعرفنا قد نكون سوف اجللسة هذه هناية يف

الكلمات املفتاحية Databaseقاعدة بياانت .1

Tableجدول .2

التعامل مع اجلداول

إنشاء جدول جديد:

CREATE TABLE table_name

(<column name> <data type>

[[DEFAULT <constant expression>]

|[IDENTITY [(seed, increment)

[COLLATE <collation name>]

[NULL|NOT NULL]

[<column constraints>]

Page 9: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 2 of 5

|[column_name AS computed_column_expression]

|[<table_constraint>]

[,...n]

)

[ON {<filegroup>|DEFAULT}]

[TEXTIMAGE_ON {<filegroup>|DEFAULT}]

table name:

يعرب عن اسم اجلدول

Column name:

اسم احلقل

Data type:

نوع منط البياانت للحقل.

DEFAULT:

يعرب عن القيمة االفرتاضية اليت أيخذها احلقل يف حال مل ندخل له قيمة.

IDENTITY

،1يعرب عن القيمة االبتدائية للعداد االفرتاضي هو seed تلقائي،حملدد ذو ترقيم ن احلقل اأحيدد increment 1)أو التناقص( للعداد. االفرتاضي هو التزايد حيدد مقدار.

COLLATE

.لألحرف، ..حساس وهل هوبشكل مشابه لقاعدة البياانت حيدد نوع الفرز

NULL/NOT NULL

أم ال؟ Nullحيدد هل هذا احلقل ميكن أن يكون ذو قيمة

Column constraints:

Page 10: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 3 of 5

حيدد جمموعة الشروط املطبقة على القيم املدخلة إىل هذا احلقل.

Computed Columns:

حيدد أن قيمة هذا احلقل تشتق من حقول اخرى )بشرط أن تكون من نفس اجلدول(.

ال ة،اجلزئية: ال ميكن أن تدرج ضمن االستعالمات ياملشاكل التالهلا SQL 2000يف االصدارات قبل ميكن أن نطبق عليها الفهارس أو القيود كاملفتاح األساسي.

Table Constraints:

عدة حقول مع بعضها. ولكن لقيمتطبق قيود على االدخاالت على اجلدول

On:

هو بدون حتديد سوف يكون ملف التخزين عليه،حندد من خالهلا أي ملف بياانت سوف يتم التخزين Primary

TEXTIMAGE_ON:

هبدف جعل ملف البياانت هلذه احلقول nText,image,textخاص ابجلداول اليت حتتوي حقول من نوع خمتلف عن ملف بياانت ابقي احلقول.

مثال:

USE Accounting

CREATE TABLE Employees

(

EmployeeID int IDENTITY NOT NULL,

FirstName varchar(25) NOT NULL,

MiddleInitial char(1) NULL,

LastName varchar(25) NOT NULL,

Title varchar(25) NOT NULL,

SSN varchar(11) NOT NULL,

Salary money NOT NULL,

Page 11: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 4 of 5

PriorSalary money NOT NULL,

LastRaise AS Salary - PriorSalary,

HireDate smalldatetime NOT NULL,

TerminationDate smalldatetime NULL,

ManagerEmpID int NOT NULL,

Department varchar(25) NOT NULL))

تعديل جدول موجود مسبقا: إما أن نعدل مواصفات حقل موجود مسبقا

ALTER TABLE Employees

Alter column LastName varchar(35) NOT NULL

شروط تعديل حقل يف جدول: ال ميكن تعديل احلقول التالية:

.timestampاحلقل من منط .1 أو يشارك يف حساب حقل آخر. computed columnحقل من منط .2

للحقل فهرس ما عدا احلقول النصية حيث تسمح ابلتعديل بشرط أن يكون احلجم اجلديد .3 أكرب أو يساوي احلجم القدمي.

(DROP STATISTICSمشارك يف اإلحصائيات املولدة )جيب إزالة اإلحصائيات ب .4

مستخدم يف مفتاح اثنوي أو رئيسي. .5

لكن ميكن تغيري حجم احلقل. CHECK or UNIQUEمطبق عليه قيد .6

جيب االنتباه يف حال تعديل حقل حبيث نغري منط املعطيات ضمن جدول حيوي بياانت. .7

للجدول:أو أن نضيف حقول جديدة

ALTER TABLE Employees

Page 12: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 5 of 5

ADD

DateOfBirth datetime NULL,

LastRaiseDate datetime NOT NULL|

أو أن حنذف حقول موجودة:

ALTER TABLE Employees

Drop column col-name

حذف قاعدة بياانت:DROP DATABASE Accounting

حذف جدول أو أكثر:

DROP TABLE Customers, Employees

انتهت المحاضرة

Page 13: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 1 of 12

الهدف من الجلسة

ا مفهوم التكامل المرجعي، كيفية فرض التكامل المرجعي عبر هذه الجلسة سوف نكون قد عرضنفي نهاية

مجموعة من القيود.

الكلمات المفتاحية

Constraints, Primary Key, Foreign Key, Check Constraints, Unique

Constraints, Default Constraints.

:رف في هذه الجلسة علىنتعس

.Primary Key Constraintقيد المفتاح األولي .1

.Unique Constraintsالقيود الفريدة .2

.Foreign Key Constraintقيد المفتاح الثانوي .3

.Check Constraintsق تحقالقيود .4

.Default Constraints االفتراضيةالقيود .5

Not Nullقيد .6

Identityقيد .7

القيود والتكامل المرجعي

Constraints and Referential

Integrity

Page 14: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 2 of 12

مقدمة

حقول على بضمان تحقيقهقوم مخدم قواعد البيانات يالذي Business Logicقيود منطق عمل تمثل ال

وتشمل هذه القيود مجال القيم التي يمكن إدخالها في عمود إضافة إلى التكامل قاعدة البيانات.جداول )أعمدة(

المرجعي للبيانات.

قاعدة بيانات، فإن مخدم قواعد البيانات عند إضافة أو حذف أو تعديل أي بيانات في جدول ما من جداول

يراعي جميع القيود المعرفة على هذه الجدول قبل تنفيذ العملية وال ينفذ هذه العملية إذا كانت تؤدي إلى أي

خلل في القيود المفروضة.

فال يمكنك إضافة أو تعديل سطر ما بحيث يصبح لديك على جدول ما، Uniqueكان مفتاح فريد إذا: لامث

تكرارات في قيمة المفتاح الفريد.

إذا كان لديك قيد على مجال القيم لعمود ما فإن إضافة أو تعديل قيمة هذا العمود لسطر ما خارج هذا :مثال

المجال سوف تؤدي إلى توليد خطأ من قبل مخدم قواعد البيانات.

في إضافة سطر مثال، فال يمكنك تراعي مخدمات قواعد البيانات التكامالت المرجعية المعرفة بين الجداول

الجدول الممثل للطرف كثير إن لم يكن هناك سطر موافق في الجدول الممثل للطرف واحد.

: فإنه ال يمكنك حذف سطر من الطرف واحد ما لم تكن جميع األسطر الموافقة له في الطرف كثير وبالمثل

(وجد استثناءات لهذه القاعدة؟ي) قد حذفت أو أنه ال يوجد أي سطر موافق في الطرف كثير.

تصنيف القيود:

1- Domain Constraints.هي قيود تطبق على حقل معين :

2- Entity Constraints.هي قيود تطبق على األسطر في الجدول :

3- Referential Integrity Constraint.قيود تطبق على حقول من جدولين مختلفين :

.اإلدخالضد أخطاء reactive بدال من أن تكون proactiveتجعل القاعدة

:Primary Key Constraintقيد المفتاح األولي

NULLم في مجموعة األعمدة المكونة له كما يمنع إدخال القيمة يضمن قيد المفتاح األولي عدم تكرار القي

Pubsمن قاعدة البيانات Authorsوهو يستخدم لضمان الوحدانية. فمثال في الجدول في أي من أعمدته.

هو مفتاح أولي يضمن وحدانية رقم كل مؤلف من جهة ومن جهة أخرى يضمن عدم au_idفإن العمود

لهذا العمود من أجل أي مؤلف. NULLإسناد قيمة

أمثلة:

نكتب التعليمة التالية: ،Departmentالجدول إلنشاءالجدول: إنشاءتحديد المفتاح األولي عند .1

Page 15: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 3 of 12

EX 01

CREATE TABLE [Department]

CREATE TABLE [Department]

(

[deptNo] [int] NOT NULL ,

[deptName] [varchar] (50) NOT NULL ,

[mangerSN] [int] NOT NULL ,

[managerStartDate] [datetime] NULL

سابق كما لالتعريف السابق ال يضمن وحدانية وعدم انعدام قيمة رقم القسم وللقيام بذلك نعدل التعريف ا (

يلي:

CREATE TABLE [Department]

(

[deptNo] [int] NOT NULL PRIMARY KEY,

[deptName] [varchar] (50) NOT NULL ,

[mangerSN] [int] NOT NULL ,

[managerStartDate] [datetime] NULL

)

لي نشاء الجدول وتعريف المفتاح األوفي المثال السابق تم إتحديد المفتاح األولي بعد إنشاء الجدول: .2

بشكل مباشر. يمكن إنشاء الجدول ومن ثم تعريف المفتاح األولي على هذا الجدول )إذا احتوى

لى قيم أعمدة المفتاح األولي ع اح األولي سينجح فقط إذا لم تحتو الجدول على بيانات فإن توليد المفت

مكررة(.

ى مفتاح أولي واحد على األكثر.يمكن أن يحوي الجدول عل مالحظة:

EX 02

DROP TABLE [Department]

GO

CREATE TABLE [Department]

(

[deptNo] [int] NOT NULL ,

[deptName] [varchar] (50) NOT NULL ,

[mangerSN] [int] NOT NULL ,

[managerStartDate] [datetime] NULL )

ول نعدل تعريف الجدول كما يلي:إلضافة القيد بعد إنشاء الجد

ALTER TABLE [Department]

ADD CONSTRAINT [PK_Department] PRIMARY KEY

(

[deptNo]

)

Page 16: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 4 of 12

.البياناتفي أي لحظة دون أي ضياع في EX 02يمكن إلغاء المفتاح األولي إذا تم إنشاؤه كما في التمرين

لحذف قيد معرف على جدول نستخدم التعليمة التالية: .يح(ألننا قمنا بتحديد اسم المفتاح بشكل صر )وذلك

EX 03

ALTER TABLE [Department]

DROP CONSTRAINT [PK_Department]

:Unique Constraintsالقيود الفريدة

مح بإدخال لكنه يسيضمن القيد الفريد عدم تكرار القيم في األعمدة المكونة له بين األسطر المختلفة للجدول.

في أي من أعمدته. NULLة قيم

ل أن يحتوي على أكثر من قيد فريد، كما يمكن لنفس العمود )الحقل( أن يشارك بعدة يمكن للجدو :مالحظة

مفاتيح فريدة.

مثال

ال يتكرر وبالتالي نعدل الجدول السابق بحيث نضيف قيد فريد لسابق نالحظ أن اسم القسم يجب أفي الجدول ا

على اسم القسم.

قيد فريد أثناء إنشاء الجدول:تحديد .1

EX 04

DROP TABLE [Department]

GO

CREATE TABLE [Department]

(

[deptNo] [int] NOT NULL ,

[deptName] [varchar] (50) NOT NULL UNIQUE,

[mangerSN] [int] NOT NULL ,

[managerStartDate] [datetime] NULL

)

إنشاء الجدول:تحديد قيد فريد بعد .2

EX 05

DROP TABLE [Department]

GO

CREATE TABLE [Department]

(

Page 17: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 5 of 12

[deptNo] [int] NOT NULL ,

[deptName] [varchar] (50) NOT NULL ,

[mangerSN] [int] NOT NULL ,

[managerStartDate] [datetime] NULL

)

GO

ALTER TABLE [Department]

ADD CONSTRAINT [UK_deptName] UNIQUE

(

[deptName]

)

يمكننا حذف القيود الفريدة في أي لحظة شريطة معرفة اسم هذا القيد كما تبين التعليمة التالية:

EX 06

ALTER TABLE [Department]

DROP CONSTRAINT [UK_deptName]

:Foreign Key Constraintقيد المفتاح الثانوي

يضمن إنشاء مفتاح ثانوي في .Uniqueي بالتزامن مع مفتاح أولي أو مع مفتاح فريد يعمل المفتاح الثانو

جدول ما كون القيم الممكن إدخالها في أعمدة هذا المفتاح مطابقة لبيانات المفتاح األولي أو الفريد الموافق.

ام لمرة واحدة ل بيانات األقستسمح هذه التقنية بالحد من تكرار البيانات في قاعدة المعطيات، فمثال نكتفي بإدخا

ثم نربط جدول الموظفين بجدول األقسام لتحديد القسم الذي يتبع له كل موظف عن طريق تحديد رقم القسم

كما أن المفتاح الثانوي يضمن تكامل المعطيات حيث يتحقق مخدم البيانات من كون الرقم مع كل موظف.

األقسام. القسم موجود فعال في جدول رقمالمدخل في حقل

تجدر اإلشارة إلى أنه ال يمكننا بعد تعريف المفتاح الخارجي أن نقوم بحذف المفتاح الرئيسي )أو الفريد(

.الموافق له ما لم نقم أوال بحذف المفتاح الخارجي

مثال:

إلى الحقل deptNo: إلنشاء جدول الموظفين بحيث يشير الحقل إنشاء مفتاح ثانوي عند إنشاء الجدول .1

ننفذ التعليمة التالية: Departmentذي يحمل نفس االسم في الجدول ال

EX 07

DROP TABLE [Department]

GO

CREATE TABLE [Department]

(

Page 18: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 6 of 12

[deptNo] [int] NOT NULL ,

[deptName] [varchar] (50) NOT NULL ,

[mangerSN] [int] NOT NULL ,

[managerStartDate] [datetime] NULL

)

GO

ALTER TABLE [Department]

ADD CONSTRAINT [PK_Department] PRIMARY KEY

(

[deptNo]

)

GO

CREATE TABLE [Employee] (

[empSN] [int] NOT NULL ,

[fName] [varchar] (50) ,

[lName] [varchar] (50) NOT NULL ,

[birthDate] [datetime] NULL ,

[hireDate] [datetime] NOT NULL ,

[address] [varchar] (50) NULL ,

[sex] [bit] NOT NULL ,

[salary] [money] NOT NULL ,

[managerSN] [int] NULL ,

[deptNo] [int] NULL

FOREIGN KEY REFERENCES Department(deptNO)

)

يمكن بنفس الشكل بناء مفتاح ثانوي بعد إنشاء الجدول وفي هذه : إنشاء مفتاح ثانوي بعد إنشاء الجدول .2

قلتكافي بيانات موجودة في حيجب أن تكون البيانات الموجودة حاليا في حقول المفتاح الثانوي الحالة

ون فاشلة.الموافق وإال فإن عملية اإلنشاء تكالفريد المفتاح األولي أو )أو حقول(

EX 08

DROP TABLE [Employee]

DROP TABLE [Department]

GO

CREATE TABLE [Department]

(

[deptNo] [int] NOT NULL ,

[deptName] [varchar] (50) NOT NULL ,

[mangerSN] [int] NOT NULL ,

[managerStartDate] [datetime] NULL

)

go

ALTER TABLE [Department]

ADD CONSTRAINT [PK_Department] PRIMARY KEY

Page 19: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 7 of 12

(

[deptNo]

)

GO

CREATE TABLE [Employee] (

[empSN] [int] NOT NULL ,

[fName] [varchar] (50) ,

[lName] [varchar] (50) NOT NULL ,

[birthDate] [datetime] NULL ,

[hireDate] [datetime] NOT NULL ,

[address] [varchar] (50) NULL ,

[sex] [bit] NOT NULL ,

[salary] [money] NOT NULL ,

[managerSN] [int] NULL ,

[deptNo] [int] NULL

)

GO

ALTER TABLE Employee

ADD CONSTRAINT [FK_Employee_Departmet]

FOREIGN KEY (deptNo)

REFERENCES Department(deptNo)

:ثانوي حذف مفتاح .3

EX 09

ALTER TABLE Employee

DROP CONSTRAINT [FK_Employee_Departmet]

يمكن حذف المفتاح الثانوي في أي وقت بدون أي اعتبارات إضافية.

التحديث التلقائي لبيانات المفتاح الثانوي: .4

ماذا يحدث إذا حذفنا قسما وكان هناك موظفين في هذا القسم؟

وماذا يحدث لو عدلنا رقم أحد األقسام الذي يحوي موظفين؟

تعديل رقم قسم يحوي موظفين. إذا للقيام بأي من نال يمكمبدئيا ال يمكن حذف قسم يحوي موظفين، كما

هاتين العمليتين البد من حذف جميع الموظفين أوال قبل تنفيذ أي عملية على األسطر الموافقة من جدول

م.األقسا

لحل المشكلتين السابقتين نعرف واصفتين لعملية تعريف المفتاح الثانوي:

1. ON UPDATE CASCADE : تعديل بيانات القسم

ينتقل بشكل آلي إلى جميع الموظفين المرتبطين بهذا القسم

Page 20: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 8 of 12

2. ON DELETE CASCADE: جميع الموظفين في هذا القسم. حذف أي قسم يؤدي إلى حذف

مثال:

EX 10

ALTER TABLE [Employee]

DROP CONSTRAINT [FK_Employee_Department]

GO

ALTER TABLE [Employee]

ADD CONSTRAINT [FK_Employee_Department]

FOREIGN KEY([deptNo])

REFERENCES [Department] ([deptNo])

ON UPDATE CASCADE

ON DELETE CASCADE

:Check Constraintsق قيود التحق

التي يمكن أن توضع في عمود أو مجموعة أعمدة أو تفرض valueعلى القيمة تفرض قيود التحقق شروطا

القيمة التي توضع في عمود أو مجموعة أعمدة. format تنسيقعلى قيودا

يقبل مخدم . hireDateوتاريخ توظيف birthDateمثال في جدول الموظفين: لكل موظف تاريخ ميالد

وكون تاريخ 1551لفرض قيد كون تاريخ الميالد أكبر من نات أي تاريخ للعمودين دون أي قيود. قواعد البيا

نعرف القيدين التاليين:سنة. 11التوظيف أكبر من تاريخ الميالد +

EX 11

ALTER TABLE [Employee]

DROP CONSTRAINT [CK_Employee_birthDate]

GO

ALTER TABLE [Employee]

DROP CONSTRAINT [CK_Employee_hireDate]

GO

ALTER TABLE [Employee]

ADD CONSTRAINT [CK_Employee_birthDate]

CHECK ((datepart(year,[birthDate])>(1950)))

GO

ALTER TABLE [Employee]

ADD CONSTRAINT [CK_Employee_hireDate]

CHECK

((datepart(year,[hireDate])>=(datepart(year,[birthDate])+(

18))))

Page 21: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 9 of 12

تجدر اإلشارة إلى أن جميع األعمدة المشاركة في قيد تحقق يجب أن تكون من نفس الجدول )سنرى الحقا

كيفية فرض قيود تحقق تشمل حقول من عدة جداول في جلسات الحقة(.

مثال:

EX 12

األطفال تتراوح بين سنة مجموعة من Ageوأعمار Nameيتضمن أسماء Agesنريد إنشاء جدول

سنة. نكتب الصيغة: 12و

CREATE TABLE Ages (Name varchar(50) Not Null , Age

INT

Constraint CheckAge CHECK (Age between 1 And 12));

إذا كنا ال نريد اسم للقيد. CheckAgeويمكن أن نكتب صيغة تحقق نفس الغرض مع حذف اسم القيد

CREATE TABLE Ages (Name varchar(50) Not Null ,

Age INT CHECK(Age between 1 And 12));

Orأو Andأن يتألف من تعبيرات منطقية تحتوي على عمليات منطقية مثل Checkيمكن لشرط القيد

:نكتب الصيغة15أو يساوي 12و 1فمثال إذا أردنا السماح بإدخال عمر بين

CREATE TABLE Ages

(Name varchar(50) Not Null ,

Age INT CHECK(Age = 15 OR Age between 1 And 12));

عدا العمر 12و 1على حقل وحيد فمثال إذا أردنا السماح بالقيم للعمر بين Checkيمكن وضع أكثر من قيد

:نكتب الصيغة 3

CREATE TABLE Ages

(Name varchar(50) Not Null , Age INT,

Constraint CheckAge1 CHECK (Age between 1 And 12),

Constraint CheckAge2 CHECK (Age <> 3));

:انتبه

Null) .قيمتهعندما ال يتلقى الحقل أي إدخاالت )أي عندما تكون Checkال يطبق القيد

Page 22: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 10 of 12

:Default Constraints االفتراضيةلقيود ا

.بديلة لقيمة حني ال يتم إسناد أية قيمةأيخذ هذا احلقل تلك ا. حتديد قيمة تلقائية حلقل ما

EX 13

ALTER TABLE [Departmenttt]

ADD CONSTRAINT [def_Departmentt] DEFAULT 5 for [mangerSN]

مثال:

سيكون إدخال تاريخ التوظيف موحدا لنفترض أننا ندخل بيانات عدد كبير من الموظفين في اليوم الواحد.

بالتالي سيكون عمال تكراريا. يمكن افتراض أن جميع الموظفين المضافين في هذا لجميع هؤالء الموظفين و

.hireDateوبالتالي نضع قيد قيمة افتراضية على العمود اليوم لهم تاريخ توظيف موافق لتاريخ اليوم الحالي

EX 14

DROP TABLE [Employee]

GO

CREATE TABLE [Employee]

(

[empSN] [int] NOT NULL, CONSTRAINT PK_Employee primary key,

[fName] [varchar](50) NULL,

[lName] [varchar](50) NOT NULL,

[birthDate] [datetime] NULL,

[hireDate] [datetime] NOT NULL CONSTRAINT

[DF_Employee_hireDate] DEFAULT (getdate()),

[address] [varchar](50) NULL,

[sex] [bit] NOT NULL,

[salary] [money] NOT NULL,

[managerSN] [int] NULL,

[deptNo] [int] NULL,

CONSTRAINT [PK_Employee] PRIMARY KEY

(

[empSN] ASC

)

)

GO

ALTER TABLE [Employee]

ADD CONSTRAINT [FK_Employee_Department]

FOREIGN KEY([deptNo])

REFERENCES [Department] ([deptNo])

Page 23: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 11 of 12

ON UPDATE SET NULL

ON DELETE CASCADE

GO

ALTER TABLE [Employee]

ADD CONSTRAINT [CK_Employee_birthDate]

CHECK ((datepart(year,[birthDate])>(1950)))

GO

ALTER TABLE [Employee]

ADD CONSTRAINT [CK_Employee_hireDate]

CHECK

((datepart(year,[hireDate])>=(datepart(year,[birthDate])+(18

))))

:NOT NULL القيد

يكفي لتطبيق هذا القيد .في الحقل المراد تقييده Nullيستخدم هذا القيد في حال أردنا أن نمنع إدخال القيمة

عند إنشاء الجدول. Not NULLإضافة التعبير

EX 15

ألي حقل من حقول Nullول بأسماء الموظفين وتوصيف عملهم بحيث نمنع إعطاء القيمة إذا أردنا إنشاء جد

:الجدول نستخدم الصيغة

CREATE TABLE Employees (name varchar(40) NOT NULL ,

Job varchar(50) NOT NULL);

:إذا حاولنا تنفيذ االستعالم التالي بغرض إضافة سجل إلى جدول الموظفين

Insert into Employees(name) values(‘Adel’)

، كون القيمة التلقائية Jobسنالحظ هذا التعبير لن يعمل وسيولد رسالة خطأ تفيد بضرورة إعطاء قيمة للحقل

. Nullحال عدم إدخال أي قيمة له هي القيمة في Jobالتي سيأخذها الحقل

:IDENTITYالقيد

يمكن .ية بصورة آلية كقيم لحقل ما عند إضافة سجل جديد إلى الجدولتوفر قواعد البيانات آلية لتوليد قيم عدد

لتوليد قيم تسلسلية تلقائية في حقل يكون هو PRIMARY KEYاستخدام هذه التقنية باالشتراك مع القيد

حقل المفتاح الرئيسي للجدول.

.IDENTITYالتعبير SQL Serverنستخدم في

:مثال

:ية للطالب وأسمائهمنود إنشاء جدول بأرقام تسلسل

Page 24: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 12 of 12

:1وتتزايد بمقدار 111األرقام تبدأ من

EX 16

CREATE TABLE Students (Name varchar(50) ,

ID INT IDENTITY (100,1) PRIMARY KEY NOT NULL);

(. 1( تكون القيمة التلقائية للبذرة والتزايد هي )1والتزايد ) (100) في حال لم نحدد البذرة لبدء العد

نتهت المحاضرةا

Page 25: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 1 of 10

Page 26: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 2 of 10

Page 27: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 3 of 10

مثال:

Page 28: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 4 of 10

مثال:

Page 29: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 5 of 10

مثال:

Page 30: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 6 of 10

مثال:

Page 31: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 7 of 10

Page 32: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 8 of 10

Page 33: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 9 of 10

Page 34: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 10 of 10

انتهت المحاضرة

Page 35: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 1 of 8

.SQL لـتعترب اإلجرائيات املخزنة من املواضيع اهلامة كوهنا تعطي العديد من امليزات

البياانت تغطي هذه اجللسة بعض النقاط املتعلقة إبدارة اإلجرائيات املخزنة وكيفية التعامل معها يف قواعد .املختلفة

سنتعرف يف هذا القسم على:

مفهوم اإلجرائيات املخزنة وفائدهتا

ا(إنشاؤها، حذفها وتعديلهة )إدارة اإلجرائيات املخزن

املتغريات وتعيينها

معامالت الدخل واخلرج

Page 36: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 2 of 8

إىل إعادة كتابة تكلمنا فيما سبق عن املناظري وذكران أهنا تسهل متثيل االستعالمات املعقدة دون احلاجة

.هذه االستعالمات

.اإلجرائيات املخزنة عبارة عن آلية تلعب دور مشابه للدور الذي تلعبه املناظري ولكن بصورة موسعة

اإلجرائيات املخزنة على استعالم واحد بل ميكن إلجرائية خمزنة واحدة أن إذ ال تنحصر قدرةالبياانت يف سجل آخر، والقيام تقوم مبجموعة من األعمال كإضافة سجل، مث تعديل

.ابحلساابت على جمموعة أخرى من السجالت وذلك اعتبارا من أمر واحد من املستخدم

عند استخدام اإلجرائيات املخزنة نقوم إبنشاء إجرائية مع معامالت دخل وخرج حبيث ميكننا املعيارية. SQL يف تعبريات استدعاؤها ابلصورة نفسها املستخدمة

تعبري أو جمموعة من تعبريات إلجراءات املخزنةحتتوي ا SQL واليت تنفذ كجزء من تنفيذالتنفيذ أو إضافة حلقات أو التنفيذ الشرطي، مما يعطي اإلجرائية مع إمكانيات التحكم بتدفق

.اإلجرائيات املخزنة متيزا كبريا

أن الفكرة ابلرغم منت اإلجرائيات املخزنة ختتلف الطريقة اليت تطبق فيها قواعد البياان .األساسية موحدة

Page 37: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 3 of 8

استدعاء اإلجراء املخزن:

ستخدم ت لى قاعدة البياانت املستخدمة فهييتم استدعاء اإلجرائيات املخزنة ابستخدام تعبريات تعتمد ع .SQLServer يف EXECأو EXECUTE تعبريال

مثال:

كمعامل دخل تصبح صيغة 3مع حتديد رقم UpdateRec إذا أردان استدعاء إجرائية خمزنة ابسم يلي: كما SQLServerاالستدعاء يف

EXECUTE UpdateRec 3;

ا أما إذ SQLServerـب نالحظ أننا مل نستخدم األقواس مع معامالت الدخل واخلرج يف الصيغة اخلاصة .معامل، فيتم القسم فيما بينها بفاصلة ناستخدمنا أكثر م

وذلك حسب الصيغة CREATE PROCEDURE ابستخدام التعبري إجرائية خمزنةميكننا إنشاء :التالية

CREATE PROCEDURE sp_name (parameter_list)

AS sp_body;

حيث:sp_name: .اسم اإلجرائية املخزنة

Parameter_list.قائمة مبعامالت الدخل واخلرج هلذه اإلجرائية مفصولة بفواصل : sp_body: حمتوى أو تعليمات اإلجرائية املخزنة.

Page 38: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 4 of 8

مثال:

لسجل الذي على رقم ا ا اعتماد Products إذا أردان إنشاء إجرائية خمزنة لتقوم حبذف سجل من جدول :هلذا السجل، نستخدم الصيغة ID والذي ميثل قيمة احلقل كمعامل دخل، منرره لتلك اإلجرائية،

CREATE PROCEDURE deleteProduct (@ProductID INT) AS

BEGIN Delete from Products where ID = @ProductID; END;

BEGIN، END ما نالحظه يف هذه الصيغة أنه قد مت احتواء جسم اإلجرائية املخزنة يف الرتكيب

كجزء من االستعالم. ProductIDل الدخل مومت استخدام معا .SQL Server املعامل ألن الصيغة السابقة هي صيغة اإلجرائية يف قبل اسم @ استخدمنا اإلشارة

اآلن إذا أردان استخدام اإلجرائية املخزنة اليت قمنا بكتابتها، ميكن ببساطة استدعاءها وتنفيذها حلذف ابستخدام الصيغة: 8املساوية لـ ID السجل ذو قيمة احلقل

EXECUTE deleteProduct (8);

:قواعد البياانت الصيغة املستخدمة حلذف إجرائية خمزنة هي تستخدم أغلبDROP PROCEDURE procedure_name;

وهو مشابه للتعبري ALTER PROCEDURE لتعديل إجرائية خمزنة نستخدم التعبريCREATE PROCEDURE اوهل املخزنة،أنه يعيد إنشاء اإلجرائية مع فارق واحد يكمن يف

الصيغة التالية:

Page 39: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 5 of 8

ALTER PROCEDURE sp_name (parameter_list)

AS sp_body;

:مثال

اليت تقوم إبدراج سجل يف جدول myStoredProcedure إذا أردان تعديل اإلجرائية املخزنةmyTable نكتب الصيغةهذا اجلدول لتقوم حبذف سجل من:

ALTER PROCEDURE myStoredProcedure (myRecordID INT) AS Delete from myTable where ID = myRecordID;

:إنشاء واستخدام املتحوالت واملعامالت

معامالت الدخل، معامالت اخلرج :هناك ثالثة أنواع من املعامالت يف اإلجرائيات املخزنة هي .خرج/الدخل ومعامالت

إلعادة قيم من اإلجرائية، تستخدم معامالت الدخل لتمرير البياانت إىل اإلجرائية، ومعامالت اخلرج .الغرضني معا ومعامالت الدخل خرج لتأمني

بصورة SQL قبل الدخول يف تفاصيل معامالت الدخل واخلرج البد من أن نتكلم عن املتحوالت يف عامة.

: SQL املتحوالت يف الذاكرة مشاهبة للمتحوالت يف اللغات األخرى غرضها األساسي ختزين قيم يف SQLيف املتحوالت

املتحول. اسرتجاعها ابستخدام اسم ميكن :للتصريح عن متحول نستخدم الصيغة

DECLARE var_name var_type (length); ميكن استخدام عبارة تصريح واحدة ألكثر من متحول يف حال كانت مجيع املتحوالت املراد التصريح

:خذ العبارة الصيغة. أتاحلجم عنها من نفس النوع ونفسDECLARE var1_name, var2_name, var3_name var_type (length);

Page 40: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 6 of 8

:مثال :نكتب الصيغة varchar إذا أردان التصريح عن متحول صحيح وثالثة متحوالت من نوع

DECLARE var1 INT; DECLARE var2, var3, var4 varchar(50);

:إسناد قيمة للمتحول

ختتلف الصيغة اخلاصة إبسناد قيمة . إىل إسناد قيمة هلا أحياان تاج حن بعد التصريح عن املتحوالت قد :هي من الصيغة SQLServer ففي حالة .أخرى ملتحول من قاعدة بياانت إىل

SET @var_name = value; أو

SELECT @var_name = value;

.ن يصبح للمتحول قيمة تستطيع استخدامه حبرية ضمن االستعالمإما

:املخزنة ابإلجرائياتلنعد جمددا إىل املعامالت اخلاصة ماذا لو أردان أن نعطي قيم تلقائية للمعامالت اخلاصة إبجرائية خمزنة؟

إلسناد قيم تلقائية للمعامالت نستخدم إشارة املساواة بعد تعريف املعامل ونضع القيمة التلقائية كما يف .SQLServer حالة

:مثال

حبيث Contactsوعنوان كل شخص يف جدول اسمإذا أردان إنشاء اإلجرائية املخزنة اليت تقوم إبدراج :يف حال عدم إعطاء قيمة للمتغري نكتب الصيغة ' Unknown ' أيخذ العنوان القيمة التلقائية

CREATE PROCEDURE Insert Contacts (@myName varchar(50), @myAddress varchar(50) = ‘Unknown’) AS Insert Into Contacts (contactName, contactAddress) Values (@myName, @myAddress);

Page 41: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 7 of 8

:استخدام معامالت اخلرجكما سبق ذكران فإن معامالت اخلرج خمصصة إلعادة قيم من اإلجرائية املخزنة إىل التطبيق الذي نفذ

.اإلجرائية

SQLServer: يفاستخدام معامالت اخلرج التعبري كمعامل خرج، نضيف SQServer لتحديد كون أحد املعامالت يف إجرائية خمزنة يف

OUTPUTتكون الصيغة من الشكل و: CREATE PROCEDURE procedure_name (@output_parameter_name INT OUTPUT)

…;

:مثال

هاتف معني ووضع القيمة املعادة يف إذا أردان إنشاء إجرائية خمزنة تقوم إبعادة اسم شخص صاحب رقم :نكتب الصيغة theName متحول اخلرج

CREATE PROCEDURE getName (@theNumber varchar(15) , @theName varchar(50) OUTPUT)

AS BEGIN SET @theName = (SELECT Name from Phonebook where Number = @theNumber) END;

.القيمة اليت أعادها االستعالم theNameلنعطي املتحول SETالتعبرينالحظ أننا استخدمنا

:ابلشكل ة دام هذه اإلجرائية املخزنة مباشر وميكننا استخDECLARE @theName varchar(50); EXECUTE getName ‘4445467’ , @theName OUTPUT; PRINT @theName;

Page 42: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 8 of 8

:قمنا هناo ابلتصريح عن املتحول theName, o مستخدمني بتنفيذ اإلجرائية املخزنةمث theName كمتحول خرج الستالم القيمة اليت تعيدها

اإلجرائية، o مث إبخراج قيمة هذا املتحول.

املخزنة اإلجرائيات حول .واملؤشرات واحللقات الشرطي للتنفيذ آليات تتضمنكما أهنا املخزنة اإلجرائيات قوة رأينا وذلك املخزنة اإلجرائيات طريق عن االستعالمات مجيع تنفيذ على الرتكيز ضرورة النظرايت بعض ترى

: التالية لألسباب جيعل مما العالئقية البياانت قواعد يف املخزنة لإلجرائيات مسبقة ترمجة عملية تتم ما غالبا

.األداء لتحسني فرصة استخدامها اهلجومات من جمموعة توقف كوهنا األمان درجة لرفع جيدة وسيلة املخزنة اإلجرائيات تعترب

.البياانت قاعدة على احملتملة األمنية مع تعامل واجهة دور تلعب التطبيقات وجعل نفسها البياانت قاعدة يف العمل منطق تضمني

.فقط البياانت

انتهت المحاضرة

Page 43: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 1 of 7

نتعرف يف هذه اجللسة على مفهوم التعابري الشرطية واحللقات وكيفية استخدامها يف قواعد البياانت .املختلفة

:أهداف تعليمية

:يتعرف الطالب يف هذا القسم على

وكيفية استخدامهامفهوم التعابري الشرطية

مفهوم احللقات واستخدامها

:كتابة النصوص الربجمية يف اإلجرائيات املخزنةابإلضافة إىل لغة برجمة SQLذكران مسبقا أن اإلجرائيات املخزنة تتألف بصورة أساسية من تعابري

التعابري الربجمية بني ختتلف .وإمكانيات أخرى بنيوية تتضمن تعابري خاصة للتنفيذ الشرطي واحللقات .أنظمة قواعد البياانت ولكنها تتشابه يف التعليمات األساسية

Page 44: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 2 of 7

:التنفيذ الشرطييف الكثري من األحيان جند أنه من الضروري أال يتم تنفيذ استعالم ما ضمن إجرائية خمزنة إال عند حتقق

.بقيمة صحيحة مثال شرط معني كإدخال معاملالسيناريوهات احملتملة أيضا الرغبة يف عدم تنفيذ استعالم ما مل يعيد استعالم سابق نتيجة قد يكون أحد

.متوقعة .أو أن حنتاج إىل تنفيذ استعالمات خمتلفة حبسب قيمة معامل حمدد مثال

:حتتوي أغلب أنظمة قواعد البياانت العالئقية على نوعني أساسني من التعابري الشرطية ا لتعبري IF…………ELSE :وهو ابلصيغة

IF condition conditionTrueBody; ELSE conditionFalseBody;

وإال conditionTrueBody الشرط الواجب تحققه لتنفيذ العبارات التي تمثلها condition حيث متثل conditionFalseBody. متثلهاسيتم تنفيذ العبارات اليت

التعبريCASE…………WHEN :ويكتب ابلصيغة CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 ….. WHEN valueN THEN resultN ELSE resultElse END;

وستكون Value1…ValueNومقارنته مع القيم expression يف هذه الصيغة سيتم تقييم التعبري النتيجةوإال سيتم تنفيذ املقابلة ألول عملية مطابقة، result نتيجة هذه الصيغة هي النتيجة

.resultElse .عراض عمل هذه البىنيلي ابست سنقوم فيما

Page 45: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 3 of 7

التعابري الشرطية يف قواعد بياانت WHEN….CASEو IF…. ELSE سنرى كيفية استثمار التعابري الشرطية

SQL Server . :IF…. ELSEالرتكيب :SQL Serverالشرطية الصيغة التالية يف IF…. ELSE أتخذ بنية

IF condition BEGIN trueStatments END ELSE BEGIN falseStatments END

الصيغة السابقة يف حال كان املطلوب تنفيذ تعبري واحد يف كتلة من END و BEGIN ميكن حذفBEGIN END.كما ميكن كذلك االستغناء عن ELSE اخلاصة هبا يف حال عدم الرغبة مع الكتلة

. بتنفيذ أي تعبري عند عدم حتقق الشرط مثال:

إذا أردان أن نكتب اإلجرائية املخزنة اليت تقوم حبساب كمية املبيعات من مادة ما، وكتابة تعليق يف حقل :عن ضرورة إيقاف هذه السلعة يف حال عدم بيع أي كمية منها، نكتب الصيغة خاص يف جدول املواد

CREATE PROCEDURE getSalesAndComment (@myProductID INT, @mySales INT OUTPUT,@myComment VARCHAR(40) OUTPUT) AS BEGIN SET @mySales= (Select sum(Quantity) from sales where productID=@myProductID); IF @mySlales=0 SET @myComment=’STOP THIS PRODUCT’; ELSE

Page 46: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 4 of 7

SET @myComment=’KEEP THIS PRODUCT’; Update products set ProductComment=@myComment Where productID=@myProductID ; END

IF ألننا مل نطلب تنفيذ سوى أمر واحد ضمن كتلة END BEGIN نالحظ أننا مل نستخدم كتلة :كننا كتابة الصيغةميالستخدام هذه اإلجرائية ،ELSEو

DECLARE @theComment VARCHAR(40); DECLARE @theSales INT EXECUTE getSalesAndComment(3, @theSales OUTPUT, @theComment OUTPUT); PRINT @theSales; PRINT @theComment;

.نالحظ أننا صرحنا عن املتغريات اليت سيتم إعادهتا من اإلجرائية وقمنا بطباعتها

:CASE…. WHENالرتكيب : SQL Server الشرطية الصيغة التالية يف WHEN CASEة أتخذ بني

SET @aVariable= CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2

….. WHEN valueN THEN resultN ELSE resultElse END;

أو SELECT إال ضمن عبارة SQL Serverيف WHEN CASE ال نستطيع استخدام الرتكيب إسناد قيمة ملتغري. عبارة

…value1 دون وضع أي تعبري بعدها حيث ميكن هنا استخدام CASEميكن استخدام التعبري valueN .لوضع شروط خمتلفة

Page 47: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 5 of 7

مثال:

وتعرب عن مستواه إذا أردان أن نكتب اإلجرائية املخزنة اليت تقوم بعرض عبارة تعتمد على عالمة طالب :اليت حصل عليها بعد أن أتخذ على الدرجة

CREATE PROCEDURE getStudentLevel (@myStudentName VARCHAR(50), @myStudentLevel VARCHAR(40) OUTPUT) AS BEGIN DECLARE studentGrade INT; SET @studentGrade= (Select studentGrade from students where studentName=@myStudentName); SET @myStudentLevel= CASE WHEN @studentGrade>80 THEN ‘VERY GOOD’ WHEN @studentGrade>70 THEN ‘GOOD’ WHEN @studentGrade>60 THEN ‘NOT BAD’ WHEN @studentGrade>50 THEN ‘PASS’ WHEN @studentGrade<50 THEN ‘FAIL’ END; END;

:هذه اإلجرائية ميكننا كتابة الصيغةالستخدام و

DECLARE @theStudentLevel VARCHAR(40); EXECUTE getSalesAndComment(‘sami’, @ theStudentLevel OUTPUT); PRINT @ theStudentLevel;

.هنا كما نالحظ صرحنا عن املتغريات اليت سيتم إعادهتا من اإلجرائية وقمنا بطباعتها

Page 48: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 6 of 7

مثال:

Reservations اإلجرائية املخزنة اليت تقوم إبدراج حجز جديد ضمن جدول احلجوزاتلنكتب :وحساب كلفة احلجز بناء على عدد األايم ونوع الغرفة

CREATE PROCEDURE Reservations (@myRoomType varchar(10), @myDays INT) AS BEGIN IF @myRoomType= ‘Single’ Insert Into Reservations (roomType, Fee) Values(@myRoomType,20*@myDays); IF @myRoomType=’Double’ Insert Into Reservations (roomType, Fee) Values(@myRoomType,35*@myDays); IF @myRoomType=’Sweet’ Insert Into Reservations (roomType, Fee) Values(@myRoomType,45*@myDays); END;

:اإلجرائية ميكننا كتابة الصيغة هذه والستخدامEXECUTE Reservations (‘Single’,5);

احللقات والتكرارعلى استمرار التعليمات ألكثر من مرة اعتمادا تدعم قواعد البياانت تعابري خمتلفة لتأمني تنفيذ كتلة من

.حتقق شرط ما ابلصيغة: ENDو BEGIN مع WHILE يستخدم التعبري SQL Server ففي

WHILE Condition BEGIN loopBody END;

Page 49: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 7 of 7

مثال:

يف اجلدول ووضعها 011و 1 إذا أردان كتابة اإلجرائية املخزنة اليت تقوم بتوليد عشر أرقام عشوائية بنيNumbers وذلك يف قواعد بياانتSQL Server :نستخدم الصيغة

CREATE PROCEDURE tenRandoms() AS BEGIN DECLARE @myNumber INT; WHILE @myNumber<100 BEGIN Insert Into Numbers(number) Values(Round(rand)*100); SET @myNumber=@myNumber+1; END; END;

انتهت المحاضرة

Page 50: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 1 of 4

.فهوم املؤشرات واملؤشرات الضمنية وكيفية إدارهتا واالستفادة منهانتعرف يف هذه اجللسة على م

:أهداف تعليمية

:يتعرف الطالب يف هذا القسم على

مفهوم املؤشرات واملؤشرات الضمنية

استخدام املؤشرات يف إعادة قائمة نتائج

هي املؤشرات؟ما

حبيث تسمح ابلدوران على SQLضمن نص سجالت املؤشرات هي عبارة عن طريقة لتمثيل جمموعة .هذه السجالت

بصورة عامة، تؤثر املؤشرات على أداء قاعدة البياانت وينصح عادة بعدم استخدامها إال يف حال إىل القدرة على التحرك بني كل سجل من جمموعة من السجالت احلاجة الضرورة، وابألخص عند

.بصورة منفصلة

Page 51: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 2 of 4

:التصريح عن مؤشر :للتصريح عن مؤشر نستخدم الصيغة

DECLARE cursorName CURSOR FOR cursorSpecification; . م معه املؤشردستخعن االستعالم الذي سوف ي cursorSpecification حيث تعرب

إىل هناية FOR UPDATE أردان تعديل البياانت عن طريق املؤشر توجب علينا إضافة يف حال

:الصيغة حيث تصبح الصيغةDECLARE cursorName CURSOR IS cursorSpecification FOR UPDATE;

.تقوم هذه العملية إبقفال اجلداول اليت يستخدمها املؤشر حبيث ال يتمكن مستخدم آخر من تعديلهاهي columnList حيث OF columnList حتديد اجلداول اليت نود إقفاهلا إبضافة ميكننا

.قائمة أبمساء احلقول ويف هذه احلالة سيتم فقط إقفال اجلداول اليت تنتمي إليها تلك احلقولنا إذا ك FOR UPDATE عوضا عن FOR READ ONLY ميكننا أيضا حتديد اخليار

. للتعديل ال ال نريد للمؤشر أن يكون قاب

:استخدام املؤشرات :قبل استخدام مؤشر علينا أو ال أن نقوم بفتح هذا املؤشر وذلك ابلصيغة

OPEN cursorName; .تستطيع اآلن بعد فتح املؤشر استعادة سجالت منه وختزينها يف متحوالت حملية

:وصيغته من الشكل FETCH للقيام هبذا العمل سنستخدم التعبريFETCH cursorName INTO var1,var2,var3,…,varN;

قيم حقول السجل احلايل var1,var2,var3,…varN تقوم هذه العملية إبعطاء املتحوالت

.ب أن تتطابق أنوا هذه املتحوالت مع أنوا احلقول املوافقة هلاجي. للمؤشروللسجل ، FETCH FIRST للحصول على قيم احلقول للسجل األول ابستخدام ميكننا التنقل

FETCH LAST وللسجل األخري ابستخدام، FETCH PRIOR السابق ابستخدام FETCH NEXT.عوضا عن

FETCH كما ميكننا حتديد رقم السجل الذي نود استعادة معلوماته وذلك ابستخدام

Page 52: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 3 of 4

RELATIVE N أوFETCH ABSOLUTE N. ومات السجل إىل املتحوالت اخلاصة به، هي إغالق تصبح املرحلة األخرية بعد فتح املؤشر ونقل معل

:الصيغة املؤشر وذلك ابستخدامCLOSE cursorName;

:انتبه

.إىل حترير املوارد اليت استخدمها مؤشرك SQL Server قد حتتاج يف

مثال:

هذه نريد كتابة الصيغة اليت تقوم ابلدوران على جمموعة قيم ألمساء وأرقام هواتف أشخاص وطباعة .املؤشرات املعلومات عن طريق استخدام

DECLARE @myNumber varchar(15); DECLARE @myName varchar(50); DECLARE myCursor CURSOR FOR Select contactNumber, contactName from Contacts; OPEN myCursor; FETCH NEXT from myCursor INTO @myNumber, @myName; WHILE @@FETCH_STATUS = 0 PRINT @myName, @myNumber; FETCH NEXT from myCursor INTO @myNumber, @myName; END;

وحتديد االستعالم الذي ميثل جمموعة السجالت اليت يعرب myCursor هنا قمنا ابلتصريح عن املؤشر

املؤشر واملرور على السجالت واحدا تلو اآلخر ابستخدام التعبري مث قمنا بفتح عنها املؤشر،.FETCH NEXT

لتحديد فيما إذا مت الوصول إىل هناية املؤشر حيث FETCH_STATUS@@ استخدمنا هنا .يف احلالة العادية 0 مقابل -1ستكون قيمتها

Page 53: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 4 of 4

:إعادة جدول نتائج من إجرائيةقيم إفرادية من إجرائيات خمزنة ابستخدام معامالت اخلرج، ولكن حىت اآلن استعرضنا كيفية استعادة

SQL Server يف ا تعترب هذه العملية بسيطة جد. القيم من إجرائية ميكن لنا إعادة كامل جدول :فهي أتخذ الصيغة

CREATE PROCEDURE procedureName AS query;

:ابلصيغة EXECأو EXECUTE وميكننا تنفيذها ابستخدامEXEC procedureName;

مثال:

تقوم إبعادة أمساء املنتجات من جدول املنتجات نكتب myProcedure ابسم إلنشاء إجرائية :الصيغة

CREATE PROCEDURE myProcedure AS select productName from Products;

انتهت المحاضرة

Page 54: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 1 of 5

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

Page 55: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 2 of 5

ن استخدام الفهارس األداء يف حال كانت االستعالمات املستخدمة من النوع ،Selectحيس

ويضر ابألداء يف حال كانت العمليات هي عمليات حذف وإدراج وتعديل (Insert,Update,Delete ألنه سيكون مطلوب من تلك العمليات أن تطب ق على )

استخدام الفهارس اجلداول األساسية وعلى الفهارس التابعة للجدول. ولكن ميكننا القول أن حيسن األداء بشكل يتجاوز ما قد تسببه عمليات التعديل واحلذف واإلضافة من تراجع يف

األداء.

أو جمموعة من الفهارس على جدول معني حبيث ميكن لكل فهرس أن ميكننا إنشاء فهرس يعمل على حقل أو على جمموعة من احلقول.

تتم فهرسة سجالت هذا اجلدول حسب قيمة معني،عندما تتم فهرسة جدول حسب حقلاحلقل ومنطه مما يسمح إبجياد هذه القيمة سريعا عندما جنري عملية حبث معتمدة على احلقل

رس. املفه

.يؤثر استخدام عدد كبري من الفهارس سلبيا على األداء

.عادة ما يقوم حمرك البياانت إبنشاء فهارس تلقائية للمفاتيح الرئيسية

مثال:

إذا كان لدينا جدول كبري حيتوي على أمساء الزابئن ومعلوماهتم فإن وجود فهرس على حقل اسم الزبون تستخدم االسم. ألن عملية البحث هنا ال تتم مبسح كامل سيسرع عمليات البحث واالستعالم اليت

للجدول األصلي بل ابلبحث ضمن جدول الفهرس أوال قبل الوصول إىل القيم املطابقة يف اجلدول األصلي.

Page 56: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 3 of 5

تطبق الفهارس عادة على األعمدة املستخدمة يف التعابريWhere وOrder By وتلك .Joinاخلاص ابلتعبري ONاملستخدمة مع التعبري

يفيد استخدام الفهارس مع احلقول اليت يقل فيها تكرار القيم حيث تساعد الفهارس على احلصول على اصطفائية عالية.

:للفهارس نوعني

o .فهارس فريدة أي ال تسمح بتكرار قيم يف احلقل املفهرس

o .فهارس غري فريدة تسمح بتكرار القيم ضمن احلقل املفهرس

جة إىل فهرسة املفتاح الرئيسي أو احلقول ذات القيد لسنا حباUnique ألن نظام قاعدةالبياانت يولد تلك الفهارس تلقائيا ويقوم إبزالتها حال إزالة صفة املفتاح الرئيسي أو قيد

Unique .عن هذه احلقول

يغة:نستخدم الصSQLServer إلنشاء فهرس فريد )ال يسمح بتكرار قيم احلقل املفهرس( يف

CREATE UNIQUE INDEX index_name ON tableName (FieldName);

نستخدم الصيغة: SQLServerوإلنشاء فهرس غري فريد ) يسمح بتكرار قيم احلقل املفهرس( يف

CREATE INDEX index_name ON tableName (FieldName);

مثال:

Numberوأرقام هواتفهم ،Nameالذي حيتوي أمساء األشخاص Phonebookلدينا اجلدول اخل...فإذا أردان إنشاء فهرس فريد على حقل فسيكون عائلة، أصدقاء،: Categoryوتصنيفهم

حيث علمنا أن حقل االسم هو حقل مفتاح رئيسي مفهرس Numberاالختيار الصحيح هو احلقل

Page 57: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 4 of 5

ال يصلح ليكون فهرس فريد بسبب تكرار قيمته. لذلك ننشئ Categoryوحقل التصنيف تلقائيا، الفهرس ابلصيغة:

هذه الصيغة ستسرع إعادة نتائج البحث يف استعالم من الشكل:

مالحظة:

ال يتم البحث ضمن جدول الفهرس يف حال مت احملارف،يف حالة الفهارس على حقول سالسل سلة احملرفية األساسية( ال تبدأ من بداية السلسلة األصلية االستعالم عن سلسلة حمرفية جزئية )من السل

الشكل:ففي استعالم من

وستتم عملية مسح كاملة للجدول األساسي strColumnال يستخدم الفهرس املنشأ على احلقل

إلمتام عملية البحث.

. لكن حيتاج تطبيقه على قواعد DROP INDEXالتعبري SQLحلذف فهرس نستخدم يف

حنتاج إىل حتديد اسم اجلدول SQL Serverتعديالت طفيفة يف الصيغة ففي املختلفة،البياانت أي تكون الصيغة ابلشكل: والفهرس،

DROP INDEX myTable.myIndex;

Page 58: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 5 of 5

مثال:

نستخدم الصيغة يف Phonebookمن اجلدول numberIndexإذا أردان حذف الفهرس SQL Server:

انتهت المحاضرة

Page 59: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 1 of 2

:املفتاحية الكلمات .صيغة إنشاء، خرج، دخل، معامل، اتبع،

:ملخصعرفة التوابع على اجللسة هذه يف وسنتعرف التعريف املسبقة التوابع على سابقة مراحل يف تعرفنا

قبل من امل

.املختلفة قواعد البياانت يف املستخدم :تعليمية أهداف :على القسم هذا يف الطالب يتعرف

SQL Serverبياانت قواعد يف وإنشاؤها التوابع •

التوابع إنشاء املختلفة أبنواعها الدرجية والتوابع التجميعية التوابع وميزان وأنواعها التوابع املاضية اجللسات يف استعرضنا

اخلاصة؟ توابعنا أردان إنشاء لو ماذا ولكنالذي يساعد CREATE FUNCTIONالتعبري ANSI SQL-99 املعيار يعر ف

على إنشاء التوابع.لتوابع املعرفة من قبل ، ابCREATE FUNCTIONابلتعبري إنشاؤها يتم اليت التوابع تسمى

.User Defined Functionsاملستخدم أو :الشكل البياانت قواعد أغلب يف العامة البسيطة الصيغة أتخذ

.التوابع مع بياانت قاعدة كل تعامل كيفية على االطالع من لنا بد ال التفاصيل يف للخوض

Page 60: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 2 of 2

:اتبع استدعاءعرفة التوابع استدعاء يتم

بعد ميكننا أي األخرى التوابع مع املستخدمة الطريقة بنفس املستخدم قبل من امل

استدعاؤه التابع إنشاء :ابلشكل فورية بصورة

SQL Server:يف التوابع

:التالية الصيغة مستخدم قبل من اتبع إلنشاء SQL Serverيستخدم

على تغيري أي تسبب أال جيب ولكن تعبري من أكثر حتتوي نأ SQL Serverميكن للتوابع يف

.البياانت قاعدة يف البياانت التوابع إنشاء

:مثال االسم بوضع مرتبا، الكامل االسم إبعادة يقوم الذي()formatName ابسم اتبع إنشاء أردان إذا

:الصيغة نكتب بفاصلة اثنيا مفصوال األول واالسم أوال الثاين

:قمنا أننا البداية يف نالحظ

،fullNameابسم واحد معامل هناك حالتنا ففي التابع، هلذا الدخل معامالت بتعريف - RETURNSالتعبري ابستخدام - RETURNSبعد احملدد النوع من قيمة سيعيد التابع هذا أن بتحديد - RETURNS.بعد احملدد النوع من قيمة إلعادة RETURNالتعبري ابستخدام -

:الصيغة كتابة ميكننا التابع هذا الستعمال اآلن

انتهت المحاضرة

Page 61: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 1 of 7

أفض ابألحهاث لاات ال ي تودد ابمربم تتقياات تااده دى التكم تكم تعترب القادحات من اآل .دابلعمىاات يف قواده البااانت

دساىة لتأمني تطباق قواده العم دتمام البااانت داتااقها دمتاسمها داخ ادحاتعترب القت

يت تيفاذها ،فهي نوع خاص من اإلجرائاات ابمخونة ابمرتبطة جبهدل معني .قادهة البااانت ل.آلاة ديه أي تعهي دى هذا اجلهد تصورة

تهء تيفاذ نص ؤمتتميمييا ابستخهام معاجلات األحهاث أن ن SQL ترجمي جبعىه يتجادب .مع أحهاث معاية

من الضردري ديه التعام مع القادحات حتهيه اجلهدل ابمراد رتط القادح معه دحتهيه احلهثما إىل جهدل، أم ديه لىقادح أن يعم حني نضاف سج فه نريه مثالا .الذي سات إطالقه

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

.حتفاو القادح قب دمىاة إضافة الاج أم تعهها الا سات مث قها، كأن نيفذ قادح ما قب تيفاذ إبممانيا تيفاذ قادحات تعاكس األحهاث ال ي سببت إطال

.حذف سج حباث نىغي دمىاة تيفاذ احلذف كىااا تكبه القادحات اإلجرائاات ابمخونة من حاث اليص الربجمي الذي إبمماهنا احتوائه دمن حاث

.قهرهتا دى مترير معامالت دخ دخرج

Page 62: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 2 of 7

دميمن لقادح أن يطىق ناتطاع إنكاء أكثر من قادح دى جهدل داحه يف قادهة البااانت .قادح آخر أد أن يطىق نفاه تصورة دودية

تصيف القادحات إىل نودني أساساني دذلك تبعاا لعهد مرات تيفاذ نص القادح ديهما يؤثر احلهث

ت:دى جممودة من الاجال التعابريالقادحات على مستوى:

أد DELETEأد INSERT لم تعبري حاث يت إطالق هذا اليوع من القادحات مرة داحهةUPDATE حىت دلو قام هذا األخري ابلتأثري دى أكثر من سج.

فإذا كان لهييا قادح يرتبط تتعبري يابب حذف مئة سج ، سات تيفاذ اليص الربجمي لىقادح مرة .داحهة القادحات على مستوى السجل:

دبارات سج تؤثر فاه إحهىيف هذا اليوع من القادحات يت تيفاذ اليص الربجمي لىقادح مع ك INSERT أدDELETE أدUPDATE .فإذا كان لهييا قادح من هذا اليوع مرتبط تتعبري

UPDATE سات تيفاذ اليص الربجمي لىقادح مئة مرة ،سج تعهي مئة يقوم ت.

.دن احلهث الذي قام إبطالقها ميمييا جع أي من نودي القادحات ييفذ قب أد تعه أد دوضاا

احلهث نفاه، تايما يفذ قب احلهث، تيفذ ددن حتققت أنخذ ابحلابان أن القادحات ال ي أنجيب لذلك .تيفذ ما مل يت تيفاذ التعبري ابممث لىكهث تصورة صكاكة لن تيفذ تعه احلهث، القادحات ال ي

ت.دالتعىاما غالباا ما تاتخهم هذ القادحات يف تقاا جناح التعاتري

:القادحات يف تطباقات خمتىفة دلمن أه استخهاماهتا هيتاتخهم

ابمفاتاح اا ال ي نهدوها أيض)ما تت ابستخهام ابمفاتاح األجيباة التمامىاة ابمرجعاة دال ي دادةا أتمني 1-احلاالت، ناتخهم القادحات إذا مل تمن هذ ابمفاتاح قوية ابلهرجة المافاة لتيفاذ ففي تعض(. الثانويةهم اجلهادل يف أكثر من قادهة تااانت، أد دى أكثر من خم العم ، ككالة التمامىاة ابمرجعاة تنيهذا

Page 63: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 3 of 7

ت.قادهة تااانقواده العم ابمعقهة لضمان دهم دجود أية دمىاة تقوم تمار قواده العم أد تمامىاة تطباق 2-

.البااانت .قادهة البااانتمتاتعة دتاجا ك العمىاات ال ي تت دى اجلهادل يف 3- .تني اجلهادل دقواده البااانت دخمهمات قواده البااانت CHECK حماكاة دم القاه 4-

ادرتاض أدامر ابماتخهم داستبهاهلا، حاث ميمييا مقاطعة األدامر أد األفعال ال ي يقوم هبا ابماتخهم 5- .أخرى داستبهاهلا أبفعال

دى ماتوى التعبري فقط دال تهد القادحات دى القادحات SQLServer تهد قواده تااانت

فإذا استخهميا تعبري يقوم حبذف دكرة سجالت، سوف يت تيفاذ القادح مرة داحهة .ماتوى الاج .لمام العبارة

، BEFORE القادحات ال ي تابق احلهث أي ال ي تاتخهم التعبري SQLServer يهد الابت يهد القادحات SQLServer 2000 الياخة من داتتهاءا . ديهد فقط القادحات الالحقة . INSTEAD البهيىة أي ال ي تاتخهم التعبري

:SQLServerيف قادحإلنكاء

CREATE TRIGGER triggerName ON tableName FOR [|INSTEAD] action AS -- procedureBody;

Page 64: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 4 of 7

ثال:م

دحق valueالذي حيتوي القامة Test إىل اجلهدلسج إذا أردان إنكاء قادح مرتبط حبهث إضافة، Auditل تتاجا دمىاة إضافة الاج إىل اجلهد , حباث يقوم هذا القادح IDالرق التاىاىي :نمتب الصاغة

كما نالحظ Test نالحظ يف الصاغة الااتقة أنيا قميا ابستخهام القادح تعه إضافة سج إىل اجلهدل

حيتوي الاج الذي يت العم اا دهو جهدل مت إنكاؤ تىقائا Insertedأنيا استفهان من قا اجلهدل ته. دىاه دله تياة مطاتقة لبياة اجلهدل الذي مت رتط القادح

حيتوي الاج الذي Deleted يت أيضاا إنكاء جهدل ابس ، ديه رتط قادح تعمىاة حذف سج رتط القادح ته. ة اجلهدل الذي متمت حذفه له نفس تيا

تممن مكمىة هذا احل يف أنيا لن ناتطاع تاجا دمىاة إدراج جممودة من الاجالت ابستخهام تعبري لن يت تيفاذ القادح ، INSERT INTO…. SELECT فإذا مت استخهام التعبري. داحه

ال تهد القادحات دى ماتوى الاج . SQLServer إذ سبق دذكران أن .سوى مرة داحهة

مثال:

الصاغة: ، تمونTest إذا أردان إنكاء قادح لاقوم تتاجا دمىاات احلذف من جهدل

Page 65: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 5 of 7

الصاغة التالاة: ناتخهم SQLServer ما يف قادحلتعهي

ALTER TRIGGER triggerName ON tableName FOR [|INSTEAD] action AS -- procedureBody;

مثال:

myTriggerالااتق إذا أردان دم دمىا ي احلذف داإلدراج يف قادح داحه ميمن تعهي القادح حباث حنص دى الصاغة:

دلمن دمىها لن يمون ،Test سج يف اجلهدل ستعم الصاغة الااتقة حىت يف حالة إدراج أكثر منت تفض التعبري الذي مت اختاار يف دمىاة )ألهنا غري مهدومة أصالا(، تفض القادحات من ماتوى

التعبري إبدراج كام الاجالت ابمهخىة دال ي مت ناخها ، حاث يقوم Auditضمن اجلهدل إدراج القا .Auditإىل اجلهدل Insertedأد Deleted إىل اجلهدل

التالاة:الصاغة ناتخهم SQLSERVERيف حلذف قادح

DROP TRIGGER triggerName;

مثال:

Page 66: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 6 of 7

:الذي أنكأان مابقاا ناتخهم الصاغة myTriggerحلذف القادح ابس

:Updateحالة

يام تتعهي سج ، دمل نذكر شائاا دن دجود ما SQLServer رتط القادح يف مل نذكر حالةUpdated دى غرارDeleted دInserted لعهم دجود أصالا. دذلك

.Deletedد Inserted، يت م ء ك من اجلهدلني UPDATEفعىااا ديه رتط قادح حبهث

:فإذا أردان تعهي ابمثال الااتق لاكم حاالت اإلدراج داحلذف دالتعهي ميمييا كتاتة الصاغة

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

تفعيل وتعطيل القادحات:

يىوميا يف تعض األحاان دألسباب خاصة تتكاني األداء، تعطا دم تعض القادحات تكم قه .ابمتاتعة دتاجا احلركة مهام مؤقت، دابألخص تىك ال ي تؤدي

ALTERابستخهام التعبري يت تفعا القادحات تىقائااا تعه إنكائها، دلميك تاتطاع تعطاىها

Page 67: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

Eng. Hana Sabbagh Page 7 of 7

TABLE :دذلك ادتماداا دى الصاغة ALTER TABLE table_name DISABLE TRIGGER trigger_name;

:دإلدادة تفعا قادح مت تعطاىه ميمييا استخهام الصاغةALTER TABLE table_name ENABLE TRIGGER trigger_name;

تهالا من اس ALLما، فياتخهم التعبري أما إذا أردنا تعطيل أو تفعيل جميع القادحات الخاصة بجدول القادح. تصبح الصاغة ديهها:

ALTER TABLE table_name [ENABLE | DISABLE] TRIGGER ALL;

انتهت المحاضرة

Page 68: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

المعهد التقاني للحاسوب TIC - Technical Institute of Computer

Page 1 of 3

المادة /2قواعد معطیات /

عنوان الوظیفة قاعدة معطیات متقدمة وربطھا بواجھة برمجیةتصمیم تاریخ التوزیع اریخ اإلعادةت

MS Word, MS Visio, MS Visual Studio, MS SQLServer الموارد المطلوبة C# ,T-SQL اللغات المستخدمة

مقترحة مشاریع

محاكاة بنكنظام المشروع األول: نظام الحجوزات الفندقیة المشروع الثاني: نظام االستعارة من مكتبة المشروع الثالث: نظام سجالت عقاریة المشروع الرابع:

المشروع الخامس: نظام تأجیر سیارات )، موبایالت، أجھزة تلفازتوصیف أجھزة (حاسوبیة :المشروع السادس

المطلوب:

اختيار أحد املشاريع السابقة، وميكان للطالب اختيار مشروع خارجي بعد تقدمي توصيف نصي له .1 واملوافقة عليه.

وضع نص تفصيلي للمشروع. .2 .Visioابستخدام Database Schema وضع خمطط قاعدة البيا�ت .3واحلجم األويل حتديد ملفات قاعدة البيا�ت الالزمةمع Database البيا�تإنشاء قاعدة .4

.SQLابستخدام تعليمات لقاعدة البيا�ت توصيف جداول قاعدة البيا�ت ابستخدام القالب التايل: .5

(ھنا نضع اسم الجدول) )باللغة العربیة ھنا نضع اسم الجدول(جدول (ھنا نضع توصیف لمھمة الجدول)

ID (ھنا نحدد مھمة كل حقل في الجدول) مفتاح أساسي Name تخزين اسم الشخص

Specification تحديد اختصاص الشخص ….

.SQLعلى األقل ابستخدام تعليمات Tables جداول 3إنشاء .6على املناسبة Constraint، وكذلك إضافة القيود FKواألجنبية PKإضافة املفاتيح األساسية .7

.SQLاجلداول السابقة ابستخدام تعليمات حقول

Page 69: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

المعهد التقاني للحاسوب TIC - Technical Institute of Computer

Page 2 of 3

سجالت يف كل جدول، وكذلك اجراء عملية تعديل وعملية 3اختبار قاعدة البيا�ت إبدخال .8 حذف على كل جدول.

.SQLServerاملتاح يف Diagramوضع خمطط قاعدة البيا�ت ابستخدام .9 املناسبة لكل جدول. Indexesإنشاء الفهارس .10 ابستخدام بطاقة اجلدول التالية:توصيف كل جدول .11

بطاقة جدول

اسم الجدول الرقم المتسلسل )اسم الجدول( )اختر التسلسل الذي تراه مناسبا للجداول(

الحقول

القیمة االفتراضیة NULLیقبل النمط اسم الحقل

القیود

الحقول المشاركة نوع القید اسم القیدالحقول الخارجیة

المشاركة

الفھارس

الحقول المشاركة نوع الفھرس اسم الفھرسھل الفھرس عنقودي

Clustered

T-SQL

إنشاء الجدولCreate Table ... (…) ON …

غیر المضمنة في إنشاء الجدول)( القیودإنشاء

Alter Table … Add Constraint xx … إنشاء الفھارس

Create Index …

مالحظاتأي تعلیق تراه مناسبا لتبریر إنشاء القیود أو الفھارس وكذلك لتبریر أنماط معطیات الحقول إذا كان ذلك ضروریا برأیك. ضع ھنا

Page 70: ريظانملا - hama-univ.edu.sy€¦ · Eng. Hana Sabbagh Page 2 of 7 ريظانملا 4

المعهد التقاني للحاسوب TIC - Technical Institute of Computer

Page 3 of 3

-الالزمة لتعديل اخلرج املعطى للنتائج (مثال دمج االسم والكنية Functionsإنشاء التوابع .12 تعديل قيمة عددية...).

التالية: Viewsإنشاء املناظري .13a. View الستعالم حيوي ربط داخلي بني اجلداول. b. View .ميكن من خالله إدخال بيا�ت إىل جدول أو التعديل عليه

لقطة للشاشة لنتيجة ، مع أخدالتالية Stored Proceduresإنشاء اإلجرائيات املخزنة .14 :التنفيذ عند االستدعاء

c. .إجرائية خمزنة إلضافة بيا�ت إىل كل جدول d. أحد اجلداول من خالل املنظار إىل إجرائية خمزنة إلضافة بيا�تView. e. بشرط معني اجلداولإجرائية خمزنة لتعديل بيا�ت أحد. f. بشرط معني أحد اجلداول إجرائية خمزنة حلذف سجالت. g. .إجرائية خمزنة لالستعالم من اجلداول تعود مبتحوالت خرج لسجل واحد فقط h. لالستعالم من اجلداول تعود جبدول نتائج.إجرائية خمزنة i. إجرائية خمزنة تقوم بطباعة عدة سجالت ابستخدام املؤشراتCursors. j. إجرائية خمزنة لالستعالم من اجلداول تعود بنتائج انتقائية ابستخدام التعليمات الشرطية

واحللقات. الالزمة. Triggersإنشاء القوادح .15ومنح املستخدم هذا فقط لالستعالم من اجلداول، Role، وإنشاء دور Userإنشاء مستخدم .16

الدور. . Ado.NETالنتائج ابستخدام تقنية دخال القيم الالزمة وعرض بناء واجهات بسيطة للنظام إل.17 .Wordتوثيق خطوات العمل على ملف .18 .sql.*على ملف بالحقة T-SQLتوثيق تعليمات .19