الاتجاه المعاكس بين 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')
Select * From Orders Where Order Date > 1-1-2000
MyRes.Open "AllOrders"
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)
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
DROP VIEW
DROP VIEW A1
ALTER VIEW AS
ALTER VIEW A1 AS SELECT * FROM IslamicRecord
CREATE [UNIQUE] INDEX ON (Col1,Col2, ….)
CREATE INDEX I_L_N ON EMP (Emp_LastName)
DROP INDEX
DROP INDEX I_L_N