Skip to content

2. دليل تعليمي لـ Firebird

قبل الخوض في أساسيات لغة SQL، نقدم للقارئ شرحًا حول كيفية تثبيت Firebird SGBD بالإضافة إلى العميل الرسومي IB-Expert.

2.1. أين يمكن العثور على Firebird؟

الموقع الرئيسي لـ Firebird هو [http://firebird.sourceforge.net/]. توفر صفحة التنزيلات الروابط التالية (أبريل 2005):

Image

سيتم تنزيل العناصر التالية:

firebird-win32
ملف SGBD لنظام التشغيل Windows
firebird-net-provider
مكتبة فئات للتطبيقات .NET تتيح الوصول إلى SGBD دون الحاجة إلى برنامج تشغيل ODBC.
firebird-ODBC-driver
برنامج التشغيل ODBC الخاص بـ Firebird

قم بتثبيت هذه العناصر. يتم تثبيت SGBD في مجلد يحتوي على محتويات مشابهة لما يلي:

توجد الملفات الثنائية في المجلد [bin]:

fbguard.exe
يسمح بتشغيل/إيقاف SGBD
isql.exe
العميل الذي يتيح إدارة قواعد البيانات

تجدر الإشارة إلى أن اسم مسؤول SGBD افتراضيًا هو [SYSDBA] وكلمة مروره هي [masterkey]. تم تثبيت قوائم في [Démarrer]:

Image

يتيح الخيار [Firebird Guardian] تشغيل/إيقاف SGBD. بعد التشغيل، تظل أيقونة SGBD في شريط مهام ويندوز:

لإنشاء قواعد بيانات Firebird واستخدامها باستخدام عميل سطر الأوامر [isql.exe]، من الضروري قراءة الوثائق المرفقة مع المنتج في المجلد [doc].

2.2. : وثائق Firebird

يمكن العثور على الوثائق الخاصة بـ Firebird ولغة SQL على موقع Firebird (يناير 2006):

Image

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

Firebird 1.5 Quick Start Guide
للبدء باستخدام FB
Firebird 1.5 Error Codes
لفهم رموز الأخطاء التي ترسلها FB

كما تتوفر أدلة تدريبية حول لغة SQL:

Image

Data Definition Guide
لمعرفة كيفية إنشاء الجداول، وأنواع البيانات التي يمكن استخدامها، ...
Language Reference
دليل مرجعي لتعلم لغة SQL باستخدام Firebird

من الطرق السريعة للعمل مع Firebird وتعلم لغة SQL استخدام عميل رسومي. ومن أمثلة هذه العملاء برنامج IB-Expert الموصوف في الفقرة التالية.

2.3. العمل مع SGBD Firebird باستخدام IB- Expert

الموقع الرئيسي لـ IB-Expert هو [http://www.ibexpert.com/]. توفر صفحة التنزيلات الروابط التالية:

Image

سنختار الإصدار المجاني [Personal Edition]. بمجرد تنزيله وتثبيته، سيكون لدينا مجلد مشابه لما يلي:

Image

الملف القابل للتنفيذ هو [ibexpert.exe]. عادةً ما يتوفر اختصار في القائمة [Démarrer]:

Image

بمجرد تشغيله، يعرض IBExpert النافذة التالية:

Image

لنستخدم الخيار [Database/Create Database] لإنشاء قاعدة بيانات:

Server
قد يكون [local] أو [remote]. هنا، يقع خادمنا على نفس الجهاز الذي يعمل عليه [IBExpert]. لذا نختار [local]
Database
استخدم زر من النوع [dossier] في القائمة المنسدلة لتحديد ملف قاعدة البيانات. يقوم Firebird بوضع قاعدة البيانات بأكملها في ملف واحد. وهذه إحدى ميزاته. يمكن نقل قاعدة البيانات من جهاز إلى آخر بمجرد نسخ الملف. ويتم إضافة اللاحقة [.gdb] تلقائيًا.
Username
SYSDBA هو المسؤول الافتراضي في الإصدارات الحالية من Firebird
Password
masterkey هي كلمة مرور المسؤول SYSDBA في إصدارات Firebird الحالية
Dialect
اللهجة SQL المطلوب استخدامها
Register Database
إذا تم تحديد المربع، فسيعرض IBExpert رابطًا إلى قاعدة البيانات التي تم إنشاؤها بعد إنشائها

إذا ظهرت لك الرسالة التالية عند النقر على زر الإنشاء [OK]:

Image

فهذا يعني أنك لم تقم بتشغيل Firebird. قم بتشغيله. ستظهر نافذة جديدة:

Image

Charset
عائلة الأحرف المطلوب استخدامها. على الرغم من أن لقطة الشاشة أعلاه لا تحتوي على أي معلومات، يُنصح باختيار عائلة الأحرف [ISO-8859-1] من القائمة المنسدلة، والتي تتيح استخدام الأحرف اللاتينية المُشَدَّدة.
Server version
[IBExpert] قادر على إدارة مختلف إصدارات SGBD المشتقة من Interbase. اختر إصدار Firebird الذي قمت بتثبيته:

بمجرد تأكيد هذه النافذة الجديدة بواسطة [Register]، نحصل على النتيجة التالية:

Image

للوصول إلى قاعدة البيانات التي تم إنشاؤها، ما عليك سوى النقر مرتين على الرابط الخاص بها. عندئذٍ يعرض IBExpert شجرة تتيح الوصول إلى خصائص قاعدة البيانات:

Image

2.4. إنشاء جدول بيانات

لنقم بإنشاء جدول. نضغط بزر الفأرة الأيمن على [Tables] (انظر النافذة أعلاه) ونختار الخيار [New Table]. تظهر لنا نافذة تعريف خصائص الجدول:

لنبدأ بتسمية الجدول [ARTICLES] باستخدام حقل الإدخال [1]:

لنستخدم حقل الإدخال [2] لتعريف مفتاح أساسي [ID]:

يتم تعيين حقل كمفتاح أساسي بالنقر المزدوج على منطقة [PK] (المفتاح الأساسي) الخاصة بالحقل. لنقم بإضافة حقول باستخدام الزر الموجود أعلى [3]:

Image

ما لم نقم بـ«تجميع» تعريفنا، لن يتم إنشاء الجدول. لنستخدم الزر [Compile] أعلاه لإنهاء تعريف الجدول. يقوم IBExpert بإعداد استعلامات SQL لإنشاء الجدول ويطلب التأكيد:

Image

ومن المثير للاهتمام أن IBExpert يعرض الاستعلامات SQL التي نفذها. وهذا يتيح التعلم في آن واحد لكل من لغة SQL وكذلك اللهجة SQL التي قد تكون خاصة بالبرنامج. يتيح الزر [Commit] تأكيد المعاملة الجارية، بينما يتيح الزر [Rollback] إلغاءها. هنا نقبلها باستخدام [Commit]. وبمجرد القيام بذلك، يقوم IBExpert بإضافة الجدول الذي تم إنشاؤه إلى شجرة قاعدة البيانات لدينا:

Image

بالنقر المزدوج على الجدول، يمكننا الوصول إلى خصائصه:

Image

تتيح لنا لوحة [Constraints] إضافة قيود تكامل جديدة إلى الجدول. لنفتحها:

Image

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

  • مفاتيح خارجية [Foreign Keys]
  • قيود سلامة الحقول [Checks]
  • قيود تفرد الحقول [Uniques]

نشير إلى أن:

  • يجب أن تكون قيم الحقول [ID, PRIX, STOCKACTUEL, STOKMINIMUM] أكبر من 0
  • يجب أن يكون الحقل [NOM] غير فارغ وفريدًا

لنفتح اللوحة [Checks] ونضغط بزر الماوس الأيمن داخل مساحة تعريف القيود الخاصة بها لإضافة قيد جديد:

Image

لنحدد القيود المطلوبة:

Image

يُلاحظ أعلاه أن القيد [NOM<>''] يستخدم علامتي اقتباس مفردة وليس علامتي اقتباس مزدوجة. لن نقوم بتجميع هذه القيود باستخدام الزر [Compile] أعلاه:

Image

مرة أخرى، يُظهر IBExpert طابعًا تعليميًا من خلال الإشارة إلى الاستعلامات SQL التي نفذها. لننتقل الآن إلى اللوحة [Constraints/Uniques] للإشارة إلى أن الاسم يجب أن يكون فريدًا. وهذا يعني أنه لا يمكن وجود نفس الاسم مرتين في الجدول.

Image

لنحدد القيد:

Image

ثم نقوم بتجميعها. بعد ذلك، نفتح لوحة [DDL] (لغة تعريف البيانات) الخاصة بالجدول [ARTICLES]:

Image

يقدم هذا الرمز SQL لتوليد الجدول مع جميع قيوده. يمكن حفظ هذا الرمز في برنامج نصي لإعادة تشغيله لاحقًا:

SET SQL DIALECT 3;
SET NAMES NONE;
CREATE TABLE ARTICLES (
    ID            INTEGER NOT NULL,
    NOM           VARCHAR(20) NOT NULL,
    PRIX          DOUBLE PRECISION NOT NULL,
    STOCKACTUEL   INTEGER NOT NULL,
    STOCKMINIMUM  INTEGER NOT NULL
);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_ID check (ID>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_PRIX check (PRIX>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_STOCKACTUEL check (STOCKACTUEL>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_STOCKMINIMUM check (STOCKMINIMUM>0);
ALTER TABLE ARTICLES ADD CONSTRAINT CHK_NOM check (NOM<>'');
ALTER TABLE ARTICLES ADD CONSTRAINT UNQ_NOM UNIQUE (NOM);
ALTER TABLE ARTICLES ADD CONSTRAINT PK_ARTICLES PRIMARY KEY (ID);

2.5. إدخال البيانات في الجدول

حان الوقت الآن لإدخال البيانات في الجدول [ARTICLES]. وللقيام بذلك، سنستخدم لوحة التحكم الخاصة به [Data]:

Image

يتم إدخال البيانات بالنقر المزدوج على حقول الإدخال في كل سطر من الجدول. يتم إضافة صف جديد باستخدام الزر [+]، وحذف صف باستخدام الزر [-]. تتم هذه العمليات ضمن معاملة يتم تأكيدها بواسطة الزر [Commit Transaction] (انظر أعلاه). وبدون هذا التأكيد، ستُفقد البيانات.

2.6. المحرر SQL الخاص بـ [IB-Expert]

تتيح لغة SQL (لغة الاستعلام الهيكلية) للمستخدم ما يلي:

  1. إنشاء جداول مع تحديد نوع البيانات التي ستخزنها، والقيود التي يجب أن تستوفيها هذه البيانات
  1. إدراج البيانات فيها
  2. تعديل بعضها
  3. حذف بيانات أخرى
  4. استخراج المحتوى منها للحصول على معلومات
  5. ...

يتيح IBExpert للمستخدم إجراء العمليات من 1 إلى 4 بطريقة رسومية. وقد رأينا ذلك للتو. عندما تحتوي قاعدة البيانات على العديد من الجداول التي تحتوي كل منها على مئات الأسطر، نحتاج إلى معلومات يصعب الحصول عليها بصريًا. لنفترض على سبيل المثال أن متجرًا إلكترونيًا على الويب يستقبل آلاف المشترين شهريًا. يتم تسجيل جميع عمليات الشراء في قاعدة بيانات. بعد ستة أشهر، نكتشف أن المنتج «X» معيب. نرغب في الاتصال بجميع الأشخاص الذين اشتروه حتى يعيدوا المنتج لاستبداله مجانًا. كيف يمكن العثور على عناوين هؤلاء المشترين؟

  1. يمكننا الاطلاع بصريًّا على جميع الجداول والبحث عن هؤلاء المشترين. سيستغرق ذلك بضع ساعات.
  2. يمكن إصدار أمر SQL الذي سيعطي قائمة بهؤلاء الأشخاص في غضون ثوانٍ معدودة

تكون لغة SQL مفيدة

  • عندما تكون كمية البيانات في الجداول كبيرة
  • عندما يكون هناك العديد من الجداول المرتبطة ببعضها البعض
  • عندما تكون المعلومات المطلوبة موزعة على عدة جداول
  • ...

نقدم الآن محرر SQL الخاص بـ IBExpert. يمكن الوصول إليه عبر الخيار [Tools/SQL Editor] أو [F12]:

Image

وبذلك يمكننا الوصول إلى محرر استعلامات متطور SQL يمكننا من خلاله تجربة الاستعلامات. لنكتب استعلامًا:

Image

نقوم بتنفيذ الاستعلام SQL باستخدام الزر [Execute] الموجود أعلاه. ونحصل على النتيجة التالية:

Image

في الأعلى، تعرض علامة التبويب [Results] جدول نتائج الأمر SQL [Select]. لإصدار أمر جديد SQL، يكفي العودة إلى علامة التبويب [Edit]. عندها نجد الأمر SQL الذي تم تنفيذه.

Image

توجد عدة أزرار مفيدة في شريط الأدوات:

  • يتيح الزر [New Query] الانتقال إلى استعلام جديد SQL:

Image

وعندها تظهر صفحة تحرير فارغة:

Image

يمكننا بعد ذلك كتابة أمر جديد SQL:

Image

وتنفيذه:

Image

لنعد إلى علامة التبويب [Edit]. يتم حفظ الأوامر المختلفة SQL التي تم إصدارها بواسطة [IB-xpert]. يتيح الزر [Previous Query] العودة إلى أمر SQL تم إصداره سابقًا:

Image

وبذلك نعود إلى الطلب السابق:

Image

أما الزر [Next Query] فيتيح الانتقال إلى الأمر التالي SQL:

Image

ثم نجد الأمر SQL الذي يلي الأمر SQL في قائمة الأوامر المخزنة:

Image

يتيح الزر [Delete Query] حذف أمر SQL من قائمة الأوامر المخزنة:

Image

يتيح الزر [Clear Current Query] مسح محتوى المحرر الخاص بالأمر SQL المعروض:

Image

يتيح الزر [Commit] تأكيد التعديلات التي تم إجراؤها على قاعدة البيانات بشكل نهائي:

Image

يتيح الزر [RollBack] إلغاء التعديلات التي تم إجراؤها على قاعدة البيانات منذ آخر عملية [Commit]. إذا لم يتم إجراء أي عملية [Commit] منذ الاتصال بقاعدة البيانات، فسيتم إلغاء التعديلات التي تم إجراؤها منذ هذا الاتصال.

Image

لنأخذ مثالاً. لنقم بإدراج سطر جديد في الجدول:

Image

يتم تنفيذ الأمر SQL ولكن لا يظهر أي عرض. لا يمكننا معرفة ما إذا كان الإدراج قد تم أم لا. لمعرفة ذلك، لنقم بتنفيذ الأمر SQL الذي يلي الأمر [New Query]:

Image

ونحصل على النتيجة التالية لـ [Execute]:

Image

وبالتالي، فقد تم إدراج السطر بالفعل. دعونا الآن نفحص محتوى الجدول بطريقة أخرى. انقر نقرًا مزدوجًا على الجدول [ARTICLES] في مستكشف قواعد البيانات:

Image

ونحصل على الجدول التالي:

Image

يتيح الزر الذي يحمل رمز السهم أعلاه تحديث الجدول. بعد التحديث، لا يتغير الجدول أعلاه. يبدو أن السطر الجديد لم يتم إدراجه. لنعد إلى المحرر SQL (F12) ثم نقوم بتأكيد الأمر SQL الذي تم إصداره باستخدام الزر [Commit]:

Image

بعد ذلك، لنعد إلى الجدول [ARTICLES]. يمكننا ملاحظة أنه لم يتغير شيء حتى عند استخدام الزر [Refresh]:

Image

أعلاه، لنفتح علامة التبويب [Fields] ثم نعود إلى علامة التبويب [Data]. هذه المرة، يظهر السطر الذي تم إدراجه بشكل صحيح:

Image

عندما يبدأ إصدار الأوامر المختلفة SQL، يفتح المحرر ما يُسمى «معاملة» في قاعدة البيانات. لن تكون التعديلات التي أجراها محرر SQL عبر أوامر SQL مرئية إلا طالما بقينا في نفس المحرر SQL (يمكن فتح عدة محررات). يبدو الأمر كما لو أن المحرر SQL لا يعمل على قاعدة البيانات الفعلية بل على نسخة خاصة به. في الواقع، لا تسير الأمور بهذه الطريقة بالضبط، لكن هذه الصورة يمكن أن تساعدنا في فهم مفهوم المعاملة. لن تظهر جميع التعديلات التي أُجريت على النسخة خلال المعاملة في قاعدة البيانات الفعلية إلا بعد المصادقة عليها بواسطة [Commit Transaction]. عندئذٍ تنتهي المعاملة الحالية وتبدأ معاملة جديدة.

يمكن إلغاء التعديلات التي تم إجراؤها خلال المعاملة من خلال عملية تُسمى [Rollback]. لنقم بالتجربة التالية. لنبدأ معاملة جديدة (يكفي تنفيذ الأمر [Commit] على المعاملة الحالية) باستخدام الأمر SQL التالي:

Image

لننفذ هذا الأمر الذي يحذف جميع السطور من الجدول [ARTICLES]، ثم ننفذ الأمر الجديد SQL التالي:

Image

ونحصل على النتيجة التالية:

Image

تم حذف جميع الصفوف. لنتذكر أن هذه العملية تمت على نسخة من الجدول [ARTICLES]. للتحقق من ذلك، لنضغط مرتين على الجدول [ARTICLES] أدناه:

Image

ونعرض علامة التبويب [Data]:

Image

حتى عند استخدام الزر [Refresh] أو الانتقال إلى علامة التبويب [Fields] ثم العودة بعد ذلك إلى علامة التبويب [Data]، لا يتغير المحتوى أعلاه. وقد تم شرح ذلك. نحن الآن في معاملة أخرى تعمل على نسختها الخاصة. لنعد الآن إلى المحرر SQL (F12) ونستخدم الزر [RollBack] لإلغاء عمليات حذف الأسطر التي تمت:

Image

يُطلب منا التأكيد:

Image

لنؤكد ذلك. يؤكد المحرر SQL أن التعديلات قد تم التراجع عنها:

Image

لنُعيد تشغيل الطلب SQL أعلاه للتحقق. نجد الأسطر التي تم حذفها:

Image

أعادت العملية [Rollback] النسخة التي يعمل عليها المحرر SQL إلى الحالة التي كانت عليها في بداية المعاملة.