الاثنين، 27 نوفمبر 2017

كيف تجد قائمة بالجداول التي تستخدم حقل معين How to find a list of tables which used specific field

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



SELECT * FROM INFORMATION_SCHEMA.COLUMNS where  COLUMN_NAME='CUSTOMERID' 


أذا لم تكن متأكد من اسم الحقل يمكن ان تستخدم الاستعلام التالي



SELECT * FROM INFORMATION_SCHEMA.COLUMNS where  COLUMN_NAME LIKE '%CUSTOMERID%'

كيف تجد الحقول المستخدمة في الاجراءات المخزنة How to search for field used in SQL SPs

في هذا المشاركة سوف نوضح كيفية ايجاد الاجراءات المخزنة التي تستخدم حقل معين.
لنفرض انه لديك قاعدة بيانات تمتلك العديد من الاجراءات المخزنة وتريد ان تجد قائمة بالاجراءات المخزنة التي تستخدم الحقل (PERSONID) وذلك لانك تريد ان تقوم ببعض التعديلات في التطبيق. يمكن استخدام الاستعلام التالي الذي سوف يعيد قائمة بأسماء الاجراءات المخزنة التي تستخدم الحقل  PERSONID



SELECT ROUTINE_NAME, ROUTINE_DEFINITION  
FROM INFORMATION_SCHEMA.ROUTINES  
WHERE ROUTINE_DEFINITION LIKE '%PERSONID%'      
AND ROUTINE_TYPE='PROCEDURE' 

السبت، 25 نوفمبر 2017

انواع الجداول المستخدمة في برمجة قواعد البيانات SQL Server Tables

انواع الجداول المستخدمة في برمجة قواعد البيانات  SQL Server Tables

تعتبر الجداول هي العنصر الرئيسي لتخزين البيانات ضمن قاعدة البيانات وهناك عدة انواع من الجداول ضمن بيئة MS SQL Server ولكن في هذا الموضوع سوف نركز على الانواع الاكثر استخداما وسوف نتطرق لاحقا للانواع الاخرى. 

بصورة عامة سوف نقسم الجداول الى نوعين الجداول الدائمية وهي الجداول العادية التي تكون موجودة في قاعدة بيانات لخزن البيانات حسب متطلبات التطبيق.  النوع الثاني وهي الجداول المؤقتة(Temporary SQL tables ) والتي يتم تكوينها لاداء غرض معين ثم يتم ازالتها من النظام بعد الانتهاء منها. في معظم الاحيان نستخدم الجداول المؤقتة ضمن الاجراءات المخزنة (SPs)ولكن في بعض الاحيان نستخدمها ايضا ضمن الاستعلامات المخصصة (Ad hoc queries).

يمكن تكوين الجداول الدائمية  عن طريق استخدام عبارة (CREATE TABLE )

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


CREATE TABLE [dbo].[MSTR_CUSTOMER]
(
[SYSTEMDATETIME] [datetime] NULL,
[CUSTID]  [varchar](50) NOT NULL ,
[FIRSTNAME] [varchar](50) NOT NULL,
[MIDDELNAME] [varchar](50) NULL,
[LASTNAME] [varchar](50) NOT NULL,
[CREATEDBY] [varchar](50) NULL,
[CREATEDDATE] [datetime] NULL,
[MODIFIEDBY] [varchar](50) NULL,
[MODIFIEDDATE] [datetime] NULL,
[ID] [bigint] IDENTITY(1,1) NOT NULL
) ON [PRIMARY]



الطريقة الثانية مع ذكر اسم قاعدة البيانات

CREATE TABLE [WORK].[dbo].[MSTR_CUSTOMER1]
(
[SYSTEMDATETIME] [datetime] NULL,
[CUSTOMERID] [varchar](50) NOT NULL,
[FIRSTNAME] [varchar](50) NOT NULL,
[MIDDELNAME] [varchar](50) NULL,
[LASTNAME] [varchar](50) NOT NULL,
[CREATEDBY] [varchar](50) NULL,
[CREATEDDATE] [datetime] NULL,
[MODIFIEDBY] [varchar](50) NULL,
[MODIFIEDDATE] [datetime] NULL,
[ID] [bigint] IDENTITY(1,1) NOT NULL
ON [PRIMARY]

الاستعلامات المخصصة مقارنة بالإجراءات المخزنة ad hoc SQL queries vs stored procedures


ما المقصود بالاستعلامات المخصصة (Ad hoc SQL queries)؟

الاستعلامات المخصصة هي عبارة عن شفرات SQL  برمجية يقوم المبرمج او المطور او مدير قواعد البيانات بكتابتها وتنفيذها لغرض معين و لا يتم تخزين هذه الشفرات ضمن SQL Server لذلك تكون من مسؤولية الشخص الذي يكتب هذه الشفرات حفظها بشكل منظم (كملفات بامتداد .sql) واخذ النسخ الاحتياطي لها بشكل يدوي وبشكل دوري وذلك لحفظها من الضياع او التلف.


لكي نفهم اكثر عن الاستعلامات المخصصة سوف نأخذ الامثلة التالية


من الامثلة العملية عن الاستعلامات المخصصة : يقوم مدير قواعد البيانات (Database Administrator DBA) بكتابة وتنفيذ استعلام لمعرفة ماهي اكثر خمس عمليات استهلاكا لموارد النظام (I/O , Memory) ثم يقوم بمشاركة هذه العمليات مع فريق التطوير لمراجعتها وتحيسن كفاءة الشفرة البرمجية.  ان الاستعلام (َQuery) الذي سوف يكتبه (DBA) باستخدام Microsoft SQL Management Studio سوف يقوم بتخزينه على شكل ملف ذو امتداد .sql في مجلد المستندات في windows server الذي تم تنصيب SQL Server عليه او يمكن ان يخزنه محليا ضمن الحاسبة التي يستخدمها للوصول وتشغيل Microsoft SQL Management Studio.


مثال اخر يقوم المبرمج الذي من واجباته تقديم الدعم لتطبيق مبيعات باستلام المشاكل من المستخدمين الذين يشكون من عدم تطابق سعر المنتج مع السعر الجديد الذي يظهره النظام ضمن طلبات المبيعات. سوف يقوم المبرمج بكتابة الاستعلام (َQuery) لمعرفة متى تم تحديث الاسعار ( سوف يتسخدم جدول اسعار المواد مثلا) ثم بكتابة الاستعلام (َQuery) لمعرفة متى تمت عملية ادخال طلبات المبيعات التي يعتقد ان الاسعار فيها غير صحيحة (سوف يتسخدم جدول تفاصيل الطلبيات مثلا) ثم يقارن تاريخ تحديث السعر مع تاريخ ادخال الطللبات فأذا كان تاريخ ادخال الطلبات قبل تاريخ تحديث السعر فلا توجد مشكلة ويمكن ان يخبر المستخدمين من التحقق من تاريخ ادخال الطلبات. ولكن اذا كانت النتيجة العكس فهذا يدل على وجود خلل في النظام ويجب اصلاحه.  الاستعلامات المخصصة التي كتبها المبرمج من الافضل ان يخزنها شكل ملف ذو امتداد .sql لانه قد يواجه هذه المشكلة في المستبقل ويمكن ان يستفاد من هذه الشفرة الجاهزة.


مثال اخر يقوم مبرمج بتطوير تطبيق مبيعات وضمن هذا التطبيق توجد نافذة تعيد قائمة بكل الزبائن فيمكن ان يكتب  الاستعلام (َsql Query ) ثم يقوم باستخدام شفرات( #C) ثم يمرر البيانات الى النافذة. رغم ان هذه الطريقة ممكنة ولكنها غير مفضلة لان في مرحلة معين قد يحتاج الى تغيير المنطق البرمجي لاتسعلام قاعدة البيانات فهنا سوف يضطر الى تغير شفرة ( #C) ايضا وهذا غير مقبول عمليا في التطبيقات الكبيرة التي تمتلك العديد من النوافذ والوظائف.


من الناحية الاخرى تتيح لنا الاجراءات المخزنة التعامل برمجيا مع البيانات المخزنة ضمن قاعدة البيانات.

ما المقصود بالاجراءات المخزنة ؟

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


من الميزات الاخرى للاجراءات المخزنة يمكن للمبرمج ان يستخدمها لتطبيق قواعد العمل (Business Rules) وهذا يعطي امكانية ومرونة لاجراء التغييرات على مستوى قواعد البيانات بدون الحاجة الى اجراء تغييرات على التطبيق ( الذي قد يكون عبارة عن موقع ويب او تطبيق وندوز الخ...) وبتالي يعطي امكانية كبيرة بحل المشاكل بدون التأثير على المستخدمين.


 من الميزات الاخرى للاجراءات المخزنة هي ان هذه الشفرة البرمجية تكون مخزنة في SQL Server لذلك عند معالجة البيانات الضخمة سوف تتم عملية المعالجة ضمن السرفر وتقوم فقط بأرسال نتائج المعالجة الى التطبيق الذي استدعى الاجراء المخزن. وهذا سوف يعمل على رفع كفاءة التطبيق مقارنة بالاستعلامات المخصصة والتي قد تظطر في بعض الاحيان الى نقل كمية كبيرة من البيانات عبر الشبكة ثم تقوم بمعالجتها داخل التطبيق مما يزيد من الحمل على الشبكة وكذلك قد تؤدي معالجة البيانات الضخمة داخل التطبيق الى خفض كفاء التطبيق وضهور مشاكل البطىء.


الاجراءات المخزنة تتيح للمبرمجين تطبيق العديد من المفاهيم البرمجة ( وكذلك قسم من هذه المفاهم يمكن تطبيقها ايضا من خلال الاستعلامات المخصصة) مثل استخدام عبارات التسلسل المنطقي (مثلا عبارة IF Statement) وعبارت التفرع ( Case Switch Statement) والتعامل مع مجاميع البيانات (Dataset) عن طريق استخدام المؤشرات (Cursors)وتخزين البيانات ضمن جداول مؤقتة لغرض معالجتها و استدعاء دوال قواعد البيانات (ٍَSQL Functions) واستدعاء وتنفيذ الاجراءات المخزنة (اي يمكن تنفيذ اجراء مخزن من داخل اجراء مخزن ثاني).


في العادة تمتلك الاجراءات المخزنة بارمترات دخل ويتم استخدام القيم المدخلة لاجراء العمليات المطلوبة . ولكن ليس من الضروري ان تمتلك الاجراءات المخزنة بارمترات دخل حيث يمكن تصميم اجراء مخزن بدون بارمترات دخل. تعيد الاجراءات المخزنة النتائج بعدة طرق :

برامترات اخراج : مثلا قد تعيد برامتر يخبر التطبيق بانه تم تنفيذ الاجراء بشكل صحيح. اوتعيد قيمة معينة (مثلا عدد الزبائن في مدينة معينة) ويتم عرض هذه القيمة ضمن التطبيق.

مجاميع البيانات (Dataset) : يمكن ان يعيد الاجراء المخزن اسطر من البيانات (data rows) والتي تمرر التى التطبيق لعرضها على المستخدم ضمن تقارير او نوافذ وصفحات التطبيق.

برامترات اخراج و مجاميع البيانات (Dataset): يمكن ان يعيد الاجراء المخزن اسطر من البيانات (data rows) والتي تمرر التى التطبيق لعرضها على المستخدم ضمن تقارير او نوافذ وصفحات التطبيق وكذلك برامترات اخراج مثلا اذا كان هناك خلل في تطبيق العملية ولم تعيد اي سطر يمكن لبرامتر الاخراج ان يعيد قيمة معينة يستخدمها المبرمج لعرض رسالة خطأ للمستخدم تساعده على فهم المشكلة.


يمكن تصميم اجراء مخزن لا يعيد اي اسطر و لا يعيد كذلك برامترات اخراج. فقط ينفذ العملية المطلوبة


مدونة برمجة قواعد البيانات باللغة العربية


بسم الله الرحمن الرحيم 

سوف نسعى من خلال هذه المدونة الى تسليط الضوء على تقنيات برمجة قواعد البيانات
Microsoft SQL Server باللغة العربية لمساعدة القارىء العربي والمهتمين بهذا المجال في الحصول على مصدر اضافي يساعد في اثراء المحتوى العربي في فضاء الانترنت بهذا النوع من المواضيع.

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