Skip to content

2. آموزش فایربرد

پیش از پرداختن به مبانی زبان SQL، به خواننده نشان خواهیم داد که چگونه Firebird SGBD و کلاینت گرافیکی IB-Expert را نصب کند.

2.1. کجا می‌توانم Firebird را پیدا کنم؟

وب‌سایت اصلی Firebird به آدرس [http://firebird.sourceforge.net/] است. صفحه دانلود پیوندهای زیر را ارائه می‌دهد (آوریل ۲۰۰۵):

Image

شما باید فایل‌های زیر را دانلود کنید:

firebird-win32
SGBD برای ویندوز
firebird-net-provider
یک کتابخانه کلاسی برای برنامه‌های NET، که امکان دسترسی به SGBD را بدون استفاده از درایور ODBC فراهم می‌کند.
firebird-ODBC-driver
راننده Firebird ODBC

این کامپوننت‌ها را نصب کنید. 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 (ژانویه ۲۰۰۶) یافت:

Image

دستورالعمل‌های مختلفی به زبان انگلیسی موجود است:

Firebird 1.5 Quick Start Guide
شروع کار با FB
Firebird 1.5 Error Codes
برای درک کدهای خطایی که توسط FB بازگردانده می‌شوند

دفترچه‌های آموزشی زبان SQL نیز در دسترس هستند:

Image

Data Definition Guide
برای اطلاع از نحوه ایجاد جدول‌ها، انواع داده‌های قابل استفاده و غیره.
Language Reference
راهنمای مرجع برای یادگیری زبان SQL با فایربرد

یک روش سریع برای کار با 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] to یک پایگاه داده ایجاد کنیم:

Server
می‌تواند [local] یا [remote] باشد. در اینجا، سرور ما روی همان دستگاهی است که [IBExpert] روی آن قرار دارد. بنابراین [local] را انتخاب می‌کنیم
Database
برای انتخاب فایل پایگاه داده، از دکمه نوع [dossier] در منوی کشویی استفاده کنید. فایربرد کل پایگاه داده را در یک فایل واحد ذخیره می‌کند. این یکی از نقاط قوت آن است. شما می‌توانید پایگاه داده را به سادگی با کپی کردن فایل از یک کامپیوتر به کامپیوتر دیگر منتقل کنید. پسوند [.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] را انتخاب کنید. این کار پنجره تعریف ویژگی‌های جدول را باز می‌کند:

بیایید با استفاده از فیلد ورودی [1]، جدول را [ARTICLES] نام‌گذاری کنیم:

بیایید از فیلد ورودی [2] برای تعریف یک کلید اصلی [ID] استفاده کنیم:

با دوبار کلیک روی فیلد «Primary Key» برای [PK]، یک فیلد به کلید اصلی تبدیل می‌شود. بیایید با استفاده از دکمه بالای [3] فیلدها را اضافه کنیم:

Image

تا زمانی که تعریف خود را «کامپایل» نکرده باشیم، جدول ایجاد نخواهد شد. بیایید با استفاده از دکمه [Compile] در بالا، تعریف جدول را نهایی کنیم. IBExpert پرس‌وجوهای SQL را برای ایجاد جدول آماده می‌کند و درخواست تأیید می‌کند:

Image

جالب اینجاست که IBExpert پرس‌وجوهایی را که اجرا کرده است، نمایش می‌دهد. این امکان را به شما می‌دهد تا هم زبان 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] (به بالا مراجعه کنید) نهایی می‌شود. بدون این commit، داده‌ها از دست خواهند رفت.

2.6. ویرایشگر SQL برای [IB-Expert]

زبان SQL (زبان پرس‌وجوی ساخت‌یافته) به کاربر اجازه می‌دهد تا:

  1. ایجاد جدول‌ها با مشخص کردن نوع داده‌هایی که ذخیره خواهند کرد و محدودیت‌هایی که این داده‌ها باید برآورده کنند
  1. وارد کردن داده‌ها به درون آن‌ها
  2. تغییر برخی داده‌ها
  3. حذف سایر داده‌ها
  4. استخراج اطلاعات از داده‌ها
  5. ...

IBExpert به کاربر امکان می‌دهد عملیات ۱ تا ۴ را به‌صورت گرافیکی انجام دهد. ما همین حالا این را دیدیم. وقتی پایگاه داده شامل جداول متعددی باشد که هر کدام صدها سطر داشته باشند، به اطلاعاتی نیاز داریم که به‌دست‌آوردن آن‌ها به‌صورت بصری دشوار است. فرض کنید، برای مثال، یک فروشگاه آنلاین در ماه هزاران مشتری دارد. تمام خریدها در یک پایگاه داده ثبت می‌شوند. پس از شش ماه، مشخص می‌شود که محصول «X» معیوب است. هدف این است که با همه کسانی که آن را خریده‌اند تماس گرفته شود تا بتوانند محصول را برای تعویض رایگان بازگردانند. چگونه می‌توان آدرس این مشتریان را پیدا کرد؟

  1. می‌توان به صورت دستی همه جدول‌ها را بررسی کرد و این مشتریان را جستجو کرد. این کار چند ساعت طول خواهد کشید.
  2. ما می‌توانیم یک پرس‌وجوی SQL صادر کنیم که در عرض چند ثانیه فهرستی از این افراد را بازمی‌گرداند

زبان SQL هرگاه مفید است

  • حجم داده‌ها در جداول زیاد است
  • جدول‌های زیادی به یکدیگر مرتبط هستند
  • اطلاعات مورد نیاز در چندین جدول پراکنده است
  • ...

اکنون ویرایشگر SQL از IBExpert را ارائه می‌دهیم. این ویرایشگر از طریق گزینه‌های [Tools/SQL Editor] یا [F12] قابل دسترسی است:

Image

این به ما دسترسی به یک ویرایشگر پرس‌وجوی پیشرفته SQL می‌دهد که می‌توانیم برای آزمایش پرس‌وجوها از آن استفاده کنیم. بیایید یک پرس‌وجو وارد کنیم:

Image

ما پرس‌وجو را با استفاده از دکمه [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) بازگردیم و سپس با استفاده از دکمه [Commit]، سفارش SQL صادر شده را تأیید کنیم:

Image

پس از انجام این کار، بیایید به جدول [ARTICLES] بازگردیم. می‌بینیم که حتی با استفاده از دکمه [Refresh] نیز هیچ تغییری ایجاد نشده است:

Image

در بالا، زبانه [Fields] را باز کرده و سپس به زبانه [Data] بازگردیم. این بار، سطر درج‌شده به درستی نمایش داده می‌شود:

Image

هنگامی که دستورات مختلف SQL صادر می‌شوند، ویرایشگر چیزی را که به آن تراکنش روی پایگاه داده گفته می‌شود، باز می‌کند. تغییراتی که توسط این دستورات SQL از ویرایشگر SQL ایجاد می‌شوند، تنها زمانی قابل مشاهده خواهند بود که در همان ویرایشگر SQL باقی بمانید (می‌توانید چندین ویرایشگر را باز کنید). گویی ویرایشگر SQL نه روی پایگاه‌دادهٔ واقعی، بلکه روی یک نسخهٔ کپی از آن کار می‌کند. در واقع، این دقیقاً نحوهٔ کار آن نیست، اما این تشبیه می‌تواند به ما در درک مفهوم تراکنش کمک کند. هر تغییری که در طول یک تراکنش روی نسخهٔ کپی ایجاد شود، تنها پس از اینکه با استفاده از [Commit Transaction] تثبیت (commit) شود، در پایگاه دادهٔ اصلی قابل مشاهده خواهد بود. سپس تراکنش جاری تکمیل شده و یک تراکنش جدید آغاز می‌شود.

تغییراتی که در طول یک تراکنش ایجاد می‌شوند را می‌توان با دستوری به نام [Rollback] برگشت داد. بیایید آزمایش زیر را امتحان کنیم. بیایید یک تراکنش جدید را با دستور زیر شروع کنیم (به سادگی [Commit] را روی تراکنش فعلی اجرا کنید): SQL:

Image

بیایید این دستور را اجرا کنیم که تمام سطرها را از جدول [ARTICLES] حذف می‌کند، سپس [New Query] را اجرا کنیم، و در ادامه دستور جدید SQL را به شرح زیر اجرا کنیم:

Image

نتیجه زیر را به دست می‌آوریم:

Image

تمام سطرها حذف شده‌اند. به یاد داشته باشید که این کار بر روی یک کپی از جدول [ARTICLES] انجام شد. برای بررسی این موضوع، روی جدول [ARTICLES] در زیر دوبار کلیک کنید:

Image

و زبانه [Data] را مشاهده کنیم:

Image

حتی اگر از دکمه [Refresh] استفاده کنید یا به برگه [Fields] بروید و سپس به برگه [Data] بازگردید، محتوای بالا بدون تغییر باقی می‌ماند. این موضوع قبلاً توضیح داده شده است. ما در یک تراکنش متفاوت هستیم که روی نسخهٔ اختصاصی خود کار می‌کند. اکنون بیایید به ویرایشگر SQL (F12) بازگردیم و از دکمهٔ [RollBack] برای لغو حذف خطوط انجام‌شده استفاده کنیم:

Image

از ما خواسته می‌شود تأیید کنیم:

Image

بیایید تأیید کنیم. ویرایشگر SQL تأیید می‌کند که تغییرات لغو شده‌اند:

Image

بیایید پرس‌وجوی SQL بالا را دوباره اجرا کنیم تا بررسی کنیم. می‌توانیم ردیف‌هایی را که حذف شده بودند ببینیم:

Image

عملیات [Rollback] نسخه کپی‌ای را که ویرایشگر SQL روی آن کار می‌کند، به حالتی که در ابتدای تراکنش بود بازگردانده است.