الاتجاه المعاكس بين
MS SQL Server وMS Access
اعزائي الكرام سنقوم هنا بعمل مقارنه بين عملاقين من عمالقة قواعد البيانات الاول هو Server SQL والاخر هو Access وسنستعرض اهم الفروقات ومجال استخدام كل برنامج بطريقة الاتجاه المعاكس .
ستقوم الاخت زهره بإدارة ( حلبة المصارعة ) اسفه اقصد ( حوار المشاركه ) ونبدأ بالسيد SQL ليعرفنا بنفسه
SQL : اولا يا أخت زهره انتي ظلمتيني في بداية الحوار حيث قلت نعمل حوار بين عملاقين من عمالقة قواعد البيانات وانا ما ني شايف حد بجنبي يمكن هذا ...
Access : يتدخل ويقاطع SQL ويقول جاوب عن نفسك ولا تتدخل في شئون الاخرين
زهره : ارجوكم ياجماعة الهدوء الهدوء خلونا نكمل المشاركه على خير اكمل يا SQL
SQL : حأوريك يا أكسيس مين انا المفروض تروح تلعب مع اللي قدك مو معاي انا عموما سأحدثكم واقول :
في حياة كل مبرمج "حقيقي" لابد ان ياتي اليوم الذي سيحتاج فيه الى نظام قاعدة بيانات قوي ومتمكن. اكثرنا ان لم يكن كلنا استخدمنا نظم قواعد بيانات للاستخدام الصغير او المتوسط كنظام Microsoft Access. واهم مميزات النوع السابق هو رخص الثمن وسهولة الاستخدام وتوفر الدعم الفني، وذلك بسبب كثرة الكتب التي تختص فيه، كما ان انتشار المنتديات التي تتحدث عن Microsoft Access زادت من شعبية هذا النظام.
تلك كانت المميزات، واما العيوب فحدث ولا حرج! حيث ان مشاكل هذا النوع من قواعد البيانات كثيرة منها عدم توفر الامان، اذ ان عملية اختراق قواعد البيانات المصممة بهذا النظام سهلة جدا حتى لو كانت محمية بعشرات كلمات المرور. كما ان استخدام قاعدة البيانات من قبل اكثر من مستخدم يؤدي الى ضغط كبير على محركات النظام (والمعروفة بـ Microsoft Jet) مما تسبب تلف للبيانات او عدم تمكن المحرك من الاستجابة الى كافة طلبات العملاء على الشبكة.
اما Microsoft SQL Server فقد غطى على هذه العيوب، بل اضاف مميزات اخرى ماكان لاي مبرمج ان يحلم بها. كنظام الامان العالي جدا، الوظائف المعرفة مسبقاStored Procedures، الترجرز Triggers، القواعد المحددة Rules، انواع البيانات المعرفة User Defined Types، والعمليات Transactions وغيرها الكثير من الاضافات التي زادت من قوة واستقرارية هذا النظام. وقد قامت شركات كبيرة ومؤسسات حكومية ضخمة باستخدام نظام MS SQL Server او التحويل اليه -كما فعلت شركة NASA لعلوم الفضاء.
كما ان نظام SQL Server لديه القدرة على تخزين كم هائل من المعلومات يصل الى الاف الميجابايتات. وهو احد اكثر الانظمة كفاءة ليكون منافس حقيقي لنظام قواعد البيانات الشهير Oracle، حيث ان Oracle إحتكر سوق قواعد البيانات بدون منافس لفترة طويلة بالرغم من العيوب التي به -واهمها هو الصعوبة الشديدة في استخدامه.
Access : الحمد لله انك اعترفت اخيرا ان لديك عيوب وهي الصعوبة الشديده في الاستخدام وهذه نقطه تسجل لصالحي .
زهره : حسنا حسنا يا جماعة خلونا نعرف قاعدة البيانات : قاعدة البيانات هي وعاء لحفظ البيانات بمختلف انواعها، سواء كانت ارقام، وتواريخ، نصوص، او حتى صور وبيانات لقيم ثنائية Binary . ونظم قواعد البيانات مثل SQL Server باستطاعته احتواء اكثر من قاعدة بيانات واحدة. وكل قاعدة بيانات تحتوي على جداول Tables وكل جدول يحتوى على حقول Fields. كما في الشكل التالي
زهره : يا سيد SQL ممكن تعطينا الفروقات بينك وبين السيد Access
SQL : يا أخت زهره الفرق واضح مثل مابين الثرى والثريا حسنا اريدكم ان تنظروا لهذا الجدول وتقارنوا وشوفوا الفرق لان
هذا السؤال قد يطرحه كل شخص يفكر الانتقال الى MS SQL Server، وايضا في رأيي المقارنة تعتبر من اسهل الطرق لايصال المعلومة. الفروق بين SQL Server و Access كثيرة جدا. ومن اهمها، قاعدة بيانات MS Access مبنية على ملف File Based DataBase، اي تحفظ جميع بيانات القاعدة في ملفات مستقلة لها. اما SQL Server فهو نظام مبني على خادم Server Based DataBase، اي نظام متكامل لادارة قواعد البيانات يعمل في الخلفية ويعتمد على خادم وعميل Client/Server، ولا يعتمد على ملفات مستقلة لحفظ البيانات، فهو يحتوي على تركيبة خاصة به. وبعضا من الفروق الاخرى موضحة في هذا الجدول:
WOW كل هذا في SQL
ومن الفروق الاخرى. MS Access يدعم النماذج Forms بينماSQL Server لايدعمها لكنه بامكانك استخدام MS Access كواجهه للـ SQL Server بحيث تكون قاعدة البيانات هي SQL Server وفي نفس الوقت تستفيد من امكانيات Access الاخرى كالنماذج Forms والتقارير Reports. على فكرة الواجهه الرئيسية للتعامل مع SQL Server هي MS Access على حسب كلام شركة Microsoft.
المزيد ايضا، SQL Server يدعم الاجراءات المعرفة مسبقا Stored Procedures -سيتم شرحها بشكل مبسط لاحقا في هذا المشاركه. كما ان SQL Server يدعم النسخ الاحتياطي، حيث يمكنك برمجة SQL Server ليقوم بعمل نسخ احتياطية كل فترة معينة. .ميزة اخرى في MS SQL Server وهو دعمه لتقنية XML حيث انه يمكنك تصدير البيانات الى XML ولكن الى الان لم يتم دعم XML بشكل كامل وهذا ماسيتم عمله في النسخ القادمة من SQL Server.
زهره : ولكن بعد ذكر كل هذه المزايا، لايعني ان تحول قاعدة بياناتك الى SQL Server فورا، حيث ان MS Access مازال الافضل والاسهل للتطبيقات الصغيرة سواءا تجارية او حكومية طالما ان حجم البيانات لايتعدى 2 جيجابايت. على كل حال سأذكر لك متى يجدر بك ان تستخدم Access . ومتى يجدر بك ان تستخدم SQL Server:
متى تستخدم MS Access ؟
1. لديك عدد قليل من المستخدمين.
2. حجم البيانات لن يتجاوز 2 جيجا.
3. تريد السهولة الشديدة في التعامل مع قاعدة البيانات.
4. اذا اردت التوافق مع النسخ القديمة من Access . مثل Access 9x او ماقبله.
5. عدد العمليات Transactions قليل.
متى تستخدم SQL Server ؟
1. اذا كان برنامجك يتعامل مع عدد كبير من المستخدمين.
2. اذا اردت نسبة أمان عالية جدا.
3. اذا كان حجم البيانات كبير جدا.
4. عد العمليات كبير جدا.
5. اذا اردت استخدام الاجراءات المعرفة Stored Procedure والتي بدورها توفر الكثير.
6. اذا اردت الاحتراف!
Access : فتح الله عليك اخت زهره هذا الكلام المنطقي المفروض تقوليه من زمان .....
SQL : يا بني انت ما تعرف تسكت خلينا نكمل ........
زهره : لو سمحت يا سيد SQL ممكن تعطينا اهم مميزاتك ولكن بعد الفاصل
اعزائي الكرام فاصل قصبر ونعود اليكم ......................................................
اهم مميزات SQL Server :
لقد مررت قبل قليل مرور الكرام على اهم مميزات SQL Server. والان سأقوم بشرح بعض أهم مميزاته الاخرى والتي تعتبر نقاط قوة:
1. Stored Procedures : الاجراءات المعرفة كما هو واضح من اسمها هي اجراءات تقوم بكتابتها في داخل قاعدة البيانات اي في الخادم . ثم تقوم بطلبها من برنامجك مع تمرير الباراميترات المطلوبة فتحصل على النتيجة. وهذا النوع يزيد من سرعة الحصول على المعلومات. مثلا. تقوم بعمل stored procedure لاضافة صنف في قاعدة بيانات. ثم تطلبه من البرنامج مع تمرير اسم الصنف والسعر والنوع والكمية. فيقوم SQL Server بعمل ذلك نيابة عنك. ومن الفوائد الاخرى ايضا، مثلا اردت بعد فترة ان تغير قليلا في هذه الوظيفة. مثلا اضفت حقل جديد. كل الذي عليك ان تفعله هو تغيير اسلوب اضافة الصنف في الإجراء المعرف Stores Procedure دون الحاجة الى تعديل شيفرة البرنامج!. والاجراءات المعرفة تعتبر احد اهم مميزات SQL Server.
2. Triggers : الترجر "لم اجد تعريب مناسب" هو شبيه بالاجراءات المعرفة. ولكن الفرق هنا ان الترجر يتم تنفيذه عند حدوث حدث معين داخل قاعدة البيانات. مثلا اضافة او تعديل او حذف. مثلا. يمكنك عمل ترجر يتم تنفيذه عند محاولة المستخدمين حذف احد السجلات. مثلا لنفترض ان لديك قاعدة بيانات لطلبات الشراء. وحاول احد المستخدمين حذف زبون. انت تبرمج الترجر على ان يتأكد اذا كان لهذا الزبون اي طلب في قائمة الطلبات فانك توقف عملية الحذف. اما اذا لم يكن هنالك طلب فانك تكمل عملية الحذف. والترجر يريح المبرمجن كثيرا حيث انك لن تصبح بحاجة الى اضافة الكثير من الاكواد في برنامجك للتأكد من كل عملية. فقط قم بكتابة الترجر المناسب و SQL Server سيقوم بكل ذلك نيابة عنك. وبالمناسبة لايمكنك طلب الترجر من داخل برنامجك. فالترجر فقط يقوم بطلبه SQL Server عند تحقق الحدث تلقائيا.
3. Defaults : القيم الافتراضية وهي من ابسط مفاهيم SQL Server . حيث انه يمكنك ببساطة انشاء عدد من القيم الافتراضية ثم ربطها مع الحقول. فاذا احتجت الى ان تغير هذه القيم مستقبلا فقط قم بتغيير القيمة الافتراضية Default بدون الحاجة الى تغيير عدد كبير من الحقول.
4. Rules : القواعد ببساطة هي قواعد انت تحددها ثم تربطها مع حقل معين. عندها هذا الحقل لن يقبل اي قيمة تخالف هذه القاعدة. مثلا القاعدة التالية " @Name='Mo'" تخبر SQL Server بان قيمة حقل الاسم Name يجب ان تكون Mo . فاذا وضعت اي اسم اخر لن يتم قبول هذا الاسم.
مثال اخر، لنفترض انك تريد حقل "طريقة الدفع" لديك يقبل 3 خيارات. اما نقدي او شيك او حوالة. فقط ضع هذه القاعدة:
@PayMethod IN ('cash', 'cheque', 'money order')
الان اي قيمة تخالف الثلاث قيم المذكورة داخل القاعدة سيتم رفضها. على فكرة القواعد Rules موجودة في Access تحت مسمى Validation Rule لكن في Access انت تقوم بعمل قاعدة لكل حقل. فاذا اردت ان تستخدم نفس القاعدة مع اكثر من حقل يجب عليك كتابتها في كل حقل. اما في SQL Server انت تنشئ القاعدة Rule مرة واحدة ثم تربطها مع العدد الذي تريده من الحقول. فاذا اردت ان تغير القاعدة لكل تلك الحقول كل ماعليك ان تفعله هو تغيير القاعدة لمرة واحدة فقط!.
5. User Defined Data Types وتختصر (UDT) وهي نفس انواع البيانات المتوفرة في SQL Server مثل Char او BigInt ولكن مع تعديلات ان تعملها. مثلا تستطيع ان تعرف نوع جديد من البيانات يكون عبارة عن نص Char ولكنه لايقبل اكثر من 7 حروف. الى الان الموضوع عادي. لكن الجميل في الموضوع انه يمكنك ربط نوع البيانات المعرف مع قاعدة Rule وايضا مع قيمة افتراضية Default لينتج نوع من البيانات يؤدي الغرض المطلوب كما تريده !
6. Views هي مشابهه للـ Queries في Access . حيث انك تحدد البيانات التي تريد استخلاصها من قاعدة البيانات. فمثلا تقوم بتعريف View اسمها AllOrders كالتالي:
Select * From Orders Where Order Date > 1-1-2000
الان كل الذي عليك ان تفعله من داخل برنامجك هو طلب هذه الـ View فقط كالتالي مثلا:
MyRes.Open "AllOrders"
بدلا من ان تكتب الاستعلام السابق الطويل كاملا. واذا اردت ان تغير طريقة عرض البيانات . فقط قم بتعديل الـ View مرة واحدة بدلا من ان تعدله في عدة اماكن داخل برنامجك.
زهره : كلامك مشوق يا سيد SQL ممكن تحدثنا عن انسخ التي لديك
SQL : بكل سرور وليس كبعض الناس نسخه واحده فقط ( يقصد بها Access )
النسخ المختلفة من SQL Server
هنالك عدة نسخ من SQL Server في الاسواق، ولكل نسخة امكانيات معينة. فتجد نسخة المشاريع Enterprise وهي اكبر واقوى نسخة . وايضا Standard Edition وهي المستخدمة بكثرة. وهنالك نسخة المطورين Developer وهي نسخة بكامل مواصفات نسخة Enterprise ولكنها فقط مخصصة للمطورين الذي يطوروا برامج تعمل على SQL Server . وهنالك نسخة مصغرة Windows CE Edition وهي تعمل على انظمة Windows CE للاجهزة الكفية. وفي مايلي شرح للنسخ المختلفة:
1- Enterprise Edition: نسخة المشاريع وهي اكبر نسخة من SQL Server وتحتوي على كل مميزات SQL Server المتوفرة. مثل اداوت تحليل البيانات Analysis Tools والتي تتضمن مكعبات البيانات. وايضا XML. ونسخة المشاريع لديها الامكانية للتعامل مع الاجهزة التي تحتوى 32 معالج. وايضا تستطيع التعامل مع 2 جيجابايت من الذاكرة RAM . وبالنسبة لكمية البيانات فهي غير محدودة حيث انها تستوعب اكبر من 1024 جيجابايت (1 تيرابايت). وهذه النسخة لاتعمل الا على انظمه Windows 2000 Server أو Windows N.T. 4.0.
2- Standard Edition: النسخة القياسية وهي الحل الافضل للمشاريع المتوسط والصغيرة. حيث انها تحتوى على اكثر امكانيات النسخة السابقة ماعدا الامكانيات الاحترافية. وتستطيع هذه النسخة التعامل مع 4 معالجات فقط! وايضا 2 جيجابايت من الذاكرة RAM. وهذه النسخة لاتعمل الا على انظمه Windows 2000 Server أو Windows N.T. 4.0
3- Personal Edition: النسخة الشخصية وهي الحل الامثل للاستخدام الشخصي او للتطبيقات التي لاتتطلب من السيرفر ان يكون متصلا طوال الوقت. تحتوى هذه النسخة على اكثر امكانيات النسخة القياسية ولكنها ذات طاقة اقل. ومن مميزات هذه النسخة انها تعمل على كل انظمة Windows المختلفة . سواءا NT او 2000 او ME او XP .
4- Developer Edition: وهي نسخة مخصصة للمطورين او لشركات تطوير البرامج. حيث انها بكامل مواصفات نسخة المشاريع ولكنها لتجربة البرامج التي تتعامل مع SQL Server . وهذه النسخة ارخص من النسخ السابقة بالاضافة الى انها تعمل على اكثر انظمة Windows .
5- Evaluation Edition: نسخة التقييم وهي نسخة بكامل مواصفات نسخة المشاريع بدون اي نقصان لكنها تعمل لمدة 120 يوم فقط. وهي مجانية ولاتكلفك غير قيمة الشحن. وبعض الكتب ترفق هذه النسخة معها. وللمعلومية، هذه النسخ تعمل على اكثر نظم Windows.
زهره : ممكن تحدثنا سيد Access عن طريقة الاستعلام لديك بطريقة SLEECT
Access : قاعدة SELECT تبدأ بجملة SELECT ثم FROM وتنتهي بـ WHERE
ولاستخدام SELECT في الاستعلام نستخدم مثلا هذا المثال
SELECT dbo.IslamicRecords.RecordID, dbo.IslamicRecords.RecordName, dbo.Users.UserName, dbo.IslamicRecords.RecordBody, dbo.IslamicRecords.RecordType, dbo.IslamicRecords.RecordDate, dbo.Users.UserID, dbo.Groups.GroupName FROM dbo.IslamicRecords INNER JOIN dbo.Users ON dbo.IslamicRecords.UserID = dbo.Users.UserID INNER JOIN dbo.Groups ON dbo.Users.GroupID = dbo.Groups.GroupID WHERE (dbo.IslamicRecords.RecordAccept = 1)
زهره : وانت ياسيد SQL
SQL : نحن الوضع عندنا مختلف اتمنى ان تلاحظوا الفرق اولا سأعرفكم على
المناظر Views:
المنظر ما هو إلا جملة استعلام –SELECT- لكنها تخزن بجدول منطقي لا وجود له إنما يستمد معلوماته من الجدول أو الجداول المستعلم منها وبالتالي يحدث نفسه تلقائياً كل ما تجددت بيانات الجداول التي يعتمد عليها.
لكن ما الفائدة:
في كثير من الأحيان نحتاج لاستعلامات معقدة وكثيرة الاستعمال في هذه القاعدة البيانية وهذا أمر مزعج للغاية بأن تكتب هذا الاستعلام تكراراً وأيضاً بأن يصححه كلما نفذته مرة لكن إذا استعملت المناظر فستوفر عليك كتابة جملة طويلة مثل هذه:
SELECT dbo.IslamicRecords.RecordID, dbo.IslamicRecords.RecordName, dbo.Users.UserName, dbo.IslamicRecords.RecordBody, dbo.IslamicRecords.RecordType, dbo.IslamicRecords.RecordDate, dbo.Users.UserID, dbo.Groups.GroupName FROM dbo.IslamicRecords INNER JOIN dbo.Users ON dbo.IslamicRecords.UserID = dbo.Users.UserID INNER JOIN dbo.Groups ON dbo.Users.GroupID = dbo.Groups.GroupID WHERE (dbo.IslamicRecords.RecordAccept = 1)
بوضعها في منظر وليكن اسمه A1 وتستعلم عنه بالشكل التالي
SELECT * FROM A1
هل رأيت ما الفارق !!!
كيف يتم إنشاءها:
نستطيع كتابة صيغة عامة لها بالشكل التالي:
CREATE VIEW AS
حيث تستبدل باسم المنظر و بالاستعلام المراد ولنأخذ مثالنا السابق:
CREATE VIEW A1 AS SELECT dbo.IslamicRecords.RecordID, dbo.IslamicRecords.RecordName, dbo.Users.UserName, dbo.IslamicRecords.RecordBody, dbo.IslamicRecords.RecordType, dbo.IslamicRecords.RecordDate, dbo.Users.UserID, dbo.Groups.GroupName FROM dbo.IslamicRecords INNER JOIN dbo.Users ON dbo.IslamicRecords.UserID = dbo.Users.UserID INNER JOIN dbo.Groups ON dbo.Users.GroupID = dbo.Groups.GroupID
Access : لحظه يا سيد SQL انت جالس تتكلم عن ايجابياتك قول للاعضاء عن التعديل
SQL : رايح اقول وانت تهمنى في حاجه
أما عن التعديل:
أسوء ما في المناظر أنه شبه مستحيلة التعديل فهذا أمر طبيعي كونها نتيجة استعلام و يوجد عدد لا بأس منه من القيود إذا كنت تريد تنفيذ إحدى تعليمات INSERT ,UPDATE,DELETE
1. عدم احتواء الاستعلام على GROUP BY.
2. أن يكون الاستعلام معتمد عل جدول واحد.
3. أن يكون استعلام واحد أي لا يحوي UNION.
4. عدم احتواء الاستعلام على DESTINCT.
5. . يجب أن يحوي الجدول المستعلم منه مفتاحاً أساسي.
6. إذا كان المنظر مبني على منظر آخر فيجب توفر الشروط الواردة أعلاه في المنظر الأصلي.
عموماً لا يفضل استخدام المنظر للتعديل فلا فائدة مرجاة منه فقط زيادة تعقيد.
حذفه أو تعديله:
يتم حذف المنظر بالصيغة التالية:
DROP VIEW
وهذا مثال:
DROP VIEW A1
أما تعديله:
ALTER VIEW AS
وهذا مثال:
ALTER VIEW A1 AS SELECT * FROM IslamicRecord
ملاحظات:
1. المنظر مكون من مكونات قاعدة البيانات فيمكن حذفه وتعديله و وضع صلاحيات عليه.
2. يمكن إنشاء منظر عن منظر آخر.
3. يمكن تركيب جملة استعلام عن منظر كما تشاء.
4. كل الحقول الموجود في المنظر ترث اسمه عند الاستعلام عنه أي يمكننا الإشارة إليها بـ :
View_Name.Field_Name
5. تتحدث بيانات المنظر كلما تحدث الأصل.
الفهارس INDEXES:
يستخدم الفهرس لزيادة سرعة الحصول على البيانات وهو مكون رائع ويوضع على حقل ما لزيادة سرعة البحث والترتيب إعتماداً على ذلك الحقل ويضعه النظام تلقائياً على المفاتيح الأساسية
سلبياته:
للفهارس أيضاً عدة سلبيات منها:
1. صحيح أنها تأثر إيجابياً على الاستعلام لكنها تؤثر سلباً على الحذف والتعديل والإضافة وذلك بأنه يعيد فهرست الحقل من جديدة وهذا أمر مبطئ للسرعة.
2. يأخذ مساحة كبيرة ذلك الجدول المفهرسة إحدى حقوله.
إنشاءه:
نستطيع كتابة صيغة عامة لها بالشكل التالي:
CREATE [UNIQUE] INDEX ON (Col1,Col2, ….)
حيث تستبدل باسم الفهرس و باسم الجدول المراد وضع الفهرس على حقوله و ما داخل القوسين أسماء الحقول المراد فهرستها مفصولة بفاصلة من النوع , وهنالك الكلمة UNIQUE وهي إختيارية و وظيفتها منع تكرار القيم على الحقول المفهرسة.
لنفرض أننا نبحث كثيراً عن الموظفين إعتماداً على اسمهم الثاني(الكنية) فهذا يدعونا لفهرستها وهذا هو الكود اللازم:
CREATE INDEX I_L_N ON EMP (Emp_LastName)
الآن أصبح البحث باستخدام هذا الحقل أسرع لكن التعديل أصبح أبطئ والحجم أكبر لذلك عليك الموازنة جداً والانتباه هل تعدل أكثر أم تستعلم أكثر, هل يهمك أكثر الحجم أم السرعة؟؟
حذفه وتعديله:
تستطيع حذف فهرس بينما لا تستطيع تعديله إنما تزيله وتعيد بناءه من جديد وهذا صيغة حذفه:
DROP INDEX
ولحذف الفهرس السابق:
DROP INDEX I_L_N
Access : انا عارف ان عندك سلبيات في كل حاجه ولكن انت مخبيها عشان تتجمل امام الاعضاء
SQL : يأ ابني الف مرة بأقول لك لا تقاطعني اتركني اكمل المشاركه وبعدين قول اللي عندك
زهره : يا جماعة ياجماعة ارجوكم لم يبقى من الوقت سوى ثلاثين ثانية
اعزائي الكرام اترككم في رعاية الله وحفظه ولا يسعنا الا ان نشكر ضيفينا السيد Access والسيد SQL على هذه المشاركه والى اللقاء محدثتكم زهره من منتديات الفريق العربي للبرمجه قسم الاكسيس