دليل إدارة وتشغيل قواعد بيانات أوراكل الفهرس

كينونات قاعدة البيانات الأساسية Database Basic objects

Tables

هي المكون الأساسي الذي يتم فيه تخزين وإدارة البيانات , يتكون كل جدول من أسم ومجموعة من الأعمدة ويمكن تحديد مجموعة من الضوابط أو الشروط للبيانات التي يمكن أن يخزنها الجدول وهو ما يسمي بقيود التكامل integrity constraints, مثل اشتراط أن يكون عامود معين غير خالي not null , أو أن يتم تحديد عامود أو أكثر كفتاح أساسي وغيرها من القيود.

لبناء جدول داخل المستخدم الخاص بك يجب عليك أن تكون لديك الصلاحية create table وللتمكن من بناء جدول في مستخدم آخر يجب أن تملك الصلاحية create any table .

يمكن بناء عدة أنواع من الجداول وهي تتنوع حسب طبيعة الغرض من بنائها , وهذه الأنواع هي كالاتي :

  • Heap tables

هو النوع التقليدي من الجداول ويمكن بناؤه كما بالمثال التالي :

SQL> Create table emp ( Id number(13), Ename varchar2(70));

  • Index organized tables

هي جداول مبنية علي أساس مفهرس , بمعني أنه يتم تخزين البيانات في الجدول بشكل مفهرس حسب البيانات المتوفرة في الأعمدة الأمر الذي يساعد كثيرا في تسريع إسترجاع البيانات , كما في المثال التالي :

SQL> Create table emp_salary_history ( emp_no number, S_date date, salary number, CONSTRAINT pk_emp_salary PRIMARY KEY (emp_no,s_date,salary)) ORGANIZATION INDEX;

  • Global temporary tables

وهي نوع الجداول تستخدم لتخزين بيانات مؤقتة إلي حين أكمال عملية معينة , وتتوفر البيانات في تلك الجداول لتلك العملية فقط , فمثلا إن كنت تقوم بمعالجة بيانات تحتاج فيها لقراءة متسلسلة لتلك البيانات وتخزين نتائج معينة إثناء التحرك بين البيانات فإن هذا النوع من الجداول يمكن أن يكون مفيدا لك , ويمكن بناء هذا النوع من الجداول كما في المثال التالي :

SQL>SQL> Create global temporary table calc ( E_no number(13), Max_val number(13), Min_val number(13)) On commit delete rows;

  • Organization external

وهي جداول يتم بنائها بناء علي بيانات خارجية ( نصية مثلا ) . وهي تتكون من بنية الجدول وهي بنية عادية تتكون من أسم للجدول وأعمده بالأضافة إلي البيانات التي تتوفر من مصدر خارجي مثل ملف نصي .

  • Nested tables

هي جداول تحوي جداول بداخلها , ولتوضيح ذلك فإننا أن قمنا ببناء جدول يحوي أسم الموظف وعنوانه فإنه يمكننا أن نسجل عنوان واحد لكل موظف , أما إن كنا نريد أن نخزن مع كل موظف مجموعه من العناوين فانه يمكننا استخدام هذا النوع من الجداول , في المثال التالي نوضح طريقة بناءه حسب الخطوات التالية :

  • نقوم ببناء نوع جديد للعنوان

SQL> Create or reploace type address as object ( Country varchar2(60), City varchar2(25), Postal_Code varchar(10));

  • نقوم ببناء نوع آخر لمجموعة من العناوين

SQL> Create or replace type addresses as Table of address;

  • وأخيرا نقوم ببناء الجدول بناء علي النوع السابق

SQL> create table emp_adr(empName varchar2(45), adrs addresses) nested table adrs store as emp_adr_set;

حيث أن

Emp_adr هو أسم الجدول

addresses هو نوع يحوي جدول من النوع address

Emp_adr_setهي صفة تابعة للجدول تمكن من فهرسة الجدول تماماّ مثل أي جدول آخر في الأوراكل

  • Xml tables

وهي جداول يمكن أن تخزين بيانات لاستخدامها في تبادل البيانات بلغة xml eXtensible Markup) Language) , يدعم الأوراكل هذا النوع من الجداول وذلك لأتساع نطاق استخدامه في تبادل البيانات بين البيئات المختلفة ويتم بناء هذا النوع من الجداول كما في المثال التالي :

create table XMLTable ( doc_id number, xml_data XMLType);

  • للمزيد حول صيغ بناء المكون table راجع الصيغ

Indexes

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

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

يجب أن تقوم ببناء الفهارس التي تناسب طبيعة الجداول التي قمت ببناءها بغرض تسريع الاستعلامات , ولذا فإنه من الواجب قبل بناء أي فهرس التعرف علي أنواع الفهارس التي يمكن بنائها ومتي يتم بناء هذا النوع أو ذاك , ولكن قبل التعرف علي أنواع الفهارس فإننا نتعرف علي الخصائص العامة للفهارس هي :

  • الفهرس يمكن أن يشمل عامود أو اكثر من جدول معين .
  • يقوم الأوراكل بتخزين بيانات الفهارس في قاعدة البيانات ويقوم تلقائيا بتحديث تلك البيانات بناء علي التغيرات في البيانات .
  • تحوي الفارس علي مواقع السجلات باستخدام rowid .
  • يقوم الأوراكل تلقائيا باستخدام الفهارس التي قمت بإنشائها بناء علي طبيعة البيانات وشروط الاستعلام .
  • يمكن تحديد الفهرس في جملة الاستعلام .

نجد أن الأوراكل قد طورت العديد من أساليب الفهرسة والتي بدورها انعكست علي زيادة السرعة في التعامل مع البيانات , وهذه الأنواع هي كآلاتي :

  • B-tree

هذا النوع من الفهارس يستخدم في حالة التنوع في بيانات العامود المراد فهرسته , بحيث يتم فهرسة البيانات علي شكل تفرعات تشكل مسارات تستخدم في البحث عن البيانات بناء علي القيمة المراد البحث عنها . فتكون النتيجة تمكننا وبعدد قليل من المقارنات الوصول إلي موقع السجل المطلوب كما في الشكل التالي :

أسلوب الوصول إلي السجلات المفهرسة بالنوع B-tree

ففي الشكل أعلاه نجد أنه عند البحث عن السجل الذي يحوي القيمة 23 سنبدأ من أعلي الشجرة , وبما أن القيمة هي أصغر من 50 وهي نقطة البداية في الشجرة , فإننا سنتجة بإتجاه السهم الأيسر , وبذا نكون قد تجاوزنا علي الأقل نصف السجلات , لنجد أننا وصلنا إلي الفرع الذي يحوي القيمة 19 , وعندها نتجة إلي الخيار الأيمن وذلك أن القيمة محل البحث هي أكبر من 19 , ونكون بذلك قد أضفنا ربع السجلات بالجدول إلي السجلات التي لن نبحث فيها . وعندها نحصل علي موقع السجل بالبحث عن القيمة في المدي ما بين 20 و 50 .

نحصل علي موقع السجل (rowid) كما في المثال السابق ونقوم فقط بقراءة هذا الموقع من كتل البيانات Data Blocks , عوضا قراءة كل كتل البيانات التي تحوي بيانات الجدول .

استخدام هذا النوع من الفهارس مفيد جدا في تحسين سرعة إسترجاع البيانات في حالة بناء الفهرس علي عامود يحوي قيم متنوعة, وبالمقابل لا يكون مفيدا عندما تكون البيانات محصورة في قيم محددة , فهو لا يكون مفيد في حالة عدم وجود اكثر من 200 إحتمال مختلف للبيانات في عامود معين .

  • Bitmap

هذا النوع من الفهارس يستخدم في حالة محدودية التنوع في البيانات في العامود المراد بناء الفهرس عليه , فهو يكون مفيد جدا في حالة بناء فهرس علي عامود يسجل مثلا فصيلة الدم أو جنس الموظف ( ذكر – أنثي ) , فعوضا عن عمل شجرة لقيم الفهرس فإنه يتم ببناء مصفوفة ببعدين يمثل فيها البعد الأفقي القيم المفردة بينما يمثل البعد الرأسي سجلات الجدول , ويتم تسجيل بيانات المصفوفة بمقابلة جميع القيم المفردة بالعامود مع كل سجل كما في الشكل التالي بالنسبة لفئات الدم بالنسبة للموظفين.

أسلوب تخزين بيانات الفهرس من النوع Bitmap

فعندما تقوم مثلا بالبحث عن الموظفين ذو فئة الدم O فإن النتيجة ستكون النتيجة هي 0100001 التي يتم تحويلها إلي rowsid(s) للوصول إلي مواقع السجلات في كتلة البيانات باستخدام الدالة mapping function . بمعني أخر فإنه لا يتم تخزين مواقع السجلات في الفهرس وإنما يتم الحصول علي مواقع البيانات من نتيجة ترجمة عامود القيمة المطلوبة .

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

في المثال التالي نقوم ببناء فهرس من نوع bitmap علي عامود فصيلة الدم بجدول الموظفين:

SQL>CREATE BITMAP INDEX emp_blood_grp_idx ON emp (bgroup);

في حالة الاستعلام بأكثر من عامود بالجدول عليها فهرس من النوع Bitmap مثل الأعمدة ( مثلا فئة الدم + الجنس + المستوي التعليمي ) كما بالمثال التالي :

SQL> Select * from emp Where Bgroup=’O’ and Gender=’F’ and Edu_lvl=’BHD’;

فإن الأوراكل يستخدم أسلوب يسمي bitmapped index merge للوصول إلي البيانات , بإن يتم بناء قائمة مستقلة لكن فهرس ومن ثم يقوم إجراء خاص بتحديد المعرفات المشتركة بين القوائم كما في الشكل التالي :

البحث بإستخدام أكثر من عامود مفهرس بالنوع Bitmap

فإن أسلوب البحث سيكون بأن يسترجع مواقع السجلات المطابقة للشرط الخاص بالعامود الأول ومن ثم حساب تقاطعها مع مواقع السجلات المطابقة للشرط الثاني وبعدها مقاطعة النتيجة مع مواقع السجلات المطابقة للشرط الثالث , لتكون النتيجة كما في المثال السابق بأن السجلات المطابقة للشروط المحددة أعلاه هي السجلات الموجودة في الموقع 123 و 507

  • Function-Based

يستخدم هذا النوع من الفهارس في حالة الحاجة إلي تحسين الوصول للبيانات بناء علي قيم الدوال functions , فمثلا إن كنا نرغب في إنشاء فهرس للبحث عن الوظائف علي عامود يحوي بيانات ترميز (مثل الرمز 20061287 الذي يحوي عام التعيين 2006 ورمز الوظيفة 12 ورمز جهة العمل 87 ) ليتم لاحقا الاستعلام كما في المثال التالي :

SQL> Select id,emp_name from Emp Where substr(emp_code,5,2)…

فإننا في هذه الحالة نقوم ببناء فهرس من نوع Function-based كما في المثال التالي

SQL> create index emp_job_idx on emp(substr(emp_code,5,2));

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

  • للمزيد حول صيغ بناء المكون index راجع الصيغ

Views

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

فمثلا أن كنت تستخدم كثيرا العبارة التالية لمعرفة أسماء الموظفين الذين هم في إجازة :

SQL>Select emp_name from Emp Where on_leave = ‘Yes’;

فيمكنك بناء view كما يلي

SQL>Create view on_leave_emp As Select emp_name from emp Where On_leave = ‘Yes’;

ومن ثم يمكنك كلما أردت قائمة الموظفين الذين هم في إجازه كتابة الاستعلام التالي :

SQL>Select emp_name from emp_on_leave;

يرجي ملاحظة أن emp_on_leave يظهر وكأنه جدول ويمكن التعامل معه بعبارة Select فقط , ولا يمكن التعامل معه بعمليات update , delete و insert كما يجب ملاحظة أن المكون emp_on_leave لا يخزن أي بيانات عن الموظفين , وإنما هو فقط نص استعلام .

يكون من المفيد جدا بناء عدد من هذه المكونات في قاعدة البيانات وذلك لأنها تكون مفيدة للأتي :

  • يمكن من خلال المكون view إخفاء بعض أعمدة الجدول وإظهار أخري , كما يمكن من خلاله إظهار سطور بناء علي شروط معنية في الاستعلام الذي بموجبه يتم بناء المكون view , الأمر الذي يمكن أن يكون مفيدأ جدا في أمن البيانات , كما أنه يحفظ البيانات من الإضافة والتعديل والحذف
  • ببناء التطبيقات علي المكونات views يحرر المطور من قيد ضرورة تعديل جميع التطبيقات في حالة تعديل الجداول , ويمكن فقط القيام بعكس التعديلات علي المكونات views لتناسب التطبيقات , بمعني عزل التطبيقات عن الجداول الأمر الذي يعطي إمكانيات أكبر ومرونة اكثر في إدارة تطوير الأنظمة التطبيقات .

Sequences

هو عبارة عن مكون يقوم بتوليد أرقام تسلسلية , يستخدم غالبا في توليد المفاتيح الأساسية للسجلات التي يجب أن تكون متسلسلة , وهو مفيد جدا في بيئات العمل التشاركية . فمثلا إن كان هنالك جدول للموظفين مرتبط بتطبيق يقوم بتشغيله عدد كبير من المشغلين في نفس الوقت , فسيكون من الصعب بناء أرقام تسلسلية من واقع البيانات الموجودة في الجدول , وذلك أنه قد يتم إدخال السجلات في نفس اللحظة , الأمر الذي يوجد مشكلة الإقفال lock , ولذلك فإن استخدام المكون sequence سيكون مفيداً جدا في ضبط عملية تسلسل البيانات وتفادي مشاكل الإقفال .

يمكن أن يصل طول المسلسل في الأوراكل إلي 38 رقم .

  • للمزيد حول صيغ بناء المكون sequence راجع الصيغ

Procedures

الإجراء هو جزء من برنامج يحوي مجموعة من التعليمات المكتوبة بلغة SQL أو PL/SQL محفوظة في قاعدة البيانات والتي تؤدي وظيفة معينة في الغالب لا يمكن تنفيذها بعبارة SQL واحدة , يتكون

  • للمزيد حول صيغ بناء المكون Procedure راجع الصيغ

Functions

الدالة Function هي عبارة عن مجموعة من عبارات SQL أو PL/SQL محفوظة في قاعدة البيانات تؤدي وظيفة معينة وترجع قيمة معينة .

  • للمزيد حول صيغ بناء المكون Function راجع الصيغ

Packages

الحزمة Packages هي مجموعة من الإجراءات Procedures والدوال Functions مخزنة في مكون واحد , وهي تحوي مجموعة من التعريفات والمتغيرات التي تكون كلها قاعدة برمجية يمكن أن تبني عليها التطبيقات , ويمكن أستعمال الأجراءات أو الدوال داخل الحزم بأستخدام إسم الحزمة ومن ثم أسم الإجراء أو الدالة

  • للمزيد حول صيغ بناء المكون Package راجع الصيغ

Triggers

عندما تقوم ببرمجة قاعدة البيانات فإنه يمكنك تنفيذ أشياء معينة بناء علي أحداث معينة , مثلا يمكنك برمجة جدول الأيداعات المالية بحيث يقوم بزيادة الرصيد في جدول الأرصدة , فكما تم إدخال سجل إلي جدول الإيداعات فإن ذلك الإيداع ستتم إضافته إلي رصيد العميل الذي تمت عملية الأيداع لديه . المكون الذي قام بعملية إضافة الرصيد يسمي بالزناد trigger , وهو عباره عن مكون يتم بناءه وتحديد الحدث الذي سيقوم بحث مجموعة من العبارات علي إنجاز شئ معين .

  • للمزيد حول صيغ بناء المكون trigger راجع الصيغ

Synonyms

هو عبارة عن بديل أو ممثل للجدول في نفس المستخدم أو مستخدم أخر , مع إمكانية التحكم في الصلاحيات التي يمكن أن تمنح للمستخدم علي بيانات الجدول الأصلي كما هو موضح في الشكل التالي

استخدام synonym في توزيع الجدوال بين المستخدمين

الشكل أعلاه يوضح synonym مبني علي جدول داخل نفس قاعدة البيانات ولكن في مستخدم أخر وهو emp وآخر مبني علي جدول خارج قاعدة البيانات وهو dept , بحيث يمكن الوصول إلي تلك الجداول والتعامل معها تمام مثل التعامل مع الجدول info . كما أن emp و rep الموجودين في (schema 1) يتم الوصول إلي بياناتهما بناء علي صلاحيات محددة , فمثلا يمكن أن يكون المكون dept غير قابل للتعديل والحذف والأضافة .

  • للمزيد حول صيغ بناء المكون synonym راجع الصيغ

Snapshots

اللقطة أو snapshot هي عبارة عن البيانات الناتجة عن عبارة select في لحظة معينة , وتستخدم في إعادة تجميع البيانات أو توزيعها أو في كليهما , وتستخدم بالنسبة لقاعدة البيانات الواحدة في تحاشي إعادة تجميع البيانات الأرشيفية مع كل استعلام تجميع , وتستخدم في توزيع البيانات في حالة قواعد البيانات الموزعة , وتنقسم إلي نوعين :

  • Read only snapshot

وهي مكونات لا يمكن تعديل بياناتها , وإنما يمكن إستعراض البيانات الموجودة فيها فقط

  • Updatable snapshot

وهي مكونات يمكن تعديل بياناتها , وفي هذه الحالة فإن هذه التعديلات تنعكس علي الأصل

  • للمزيد حول صيغ بناء المكون snapshot راجع الصيغ