Navigation

شرح SQL بالعربي قواعد البيانات العلائقية شرح View في SQL

لكي لا يصبح كتابة الصيغ في SQL معقداً في كل مره - اذا كانت هذه الصيغ تُستخدم بكثرة - تم تضمين تعابير خاصة في SQL تمكننا من انشاء جداول افتراضية او ما يسمى بالمنظار او View تساعدنا في استعادة البيانات التي يرجعها استعلام معين, فهي توفر جداول افتراضية تحتوي على البيانات ضمن تشكيل مطلوب .

موضوعنا اليوم هو استخدام الــView او ما يسمى المنظار او الجداول الافتراضية :


لكي لا يصبح كتابة الصيغ في SQL معقداً في كل مره - اذا كانت هذه الصيغ تُستخدم بكثرة - تم تضمين تعابير خاصة في SQL تمكننا من انشاء جداول افتراضية او ما يسمى بالمنظار او View تساعدنا في استعادة البيانات التي يرجعها استعلام معين, فهي توفر جداول افتراضية تحتوي على البيانات ضمن تشكيل مطلوب .

ويمكن معاملته كأي جدول من جداول قواعد البيانات اذ يكمن الفرق الوحيد بينه وبين الجداول في كون البيانات التي تحتويه مخزنة في جداول اخرى .

ايضا تساعد الجداول الافتراضية في منع المستخدمين من الوصول الى الجداول الاصلية في قواعد البيانات اذ يحتوي المنظار او الجدول الافتراضي على جزء من البيانات المتوفرة في الجدول الاصلي .

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

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

لا نشاء منظار او اجدول افتراضي نستخدم الصيغة التالية :

CREATE VIEW view_name AS query;



حيث view_name هو اسم الجدول الافتراضي و query هو استعلام يمكن ان نستخدم فيه أي من التقنيات التي تعرفنا عليها في الدروس السابقة .

مثال:
لنفرض انه لدينا استعلام معقد نسبياً يعيد قيم من جدولين مرتبطين بأسلوب Inner Join واردنا انشاء جدول افتراضي ليحتوي على قيم الحقول المعادة من هذا الاستعلام ستكون الصيغة كما يلي :
CREATE VIEW MySimpleView Projects.projectName ,
count (Tasks.taskID) AS TasksNumber
From Tasks Inner Join Projects
ON Tasks.projectID = Projects.projectID
Group by projectName;



لاحظ انشاءنا جدول افتراضي بإسم MySimpleView يحتوي على الحقول projectName و tasksNumber .. بعد ان قمنا بإنشاء الجدول الافتراضي يمكننا ببساطة استخدام أي استعلام والتعامل مع الجدول الافتراضي كما في الصيغة التالية :

Select projectName from MySimpleView;

وهذه تعتبر من فوائد الجداول الافتراضية وهي تبسيط الاستعلامات المعقدة كما اسلفنا سابقا وذلك بتجميع البيانات من عدة جداول وكتابة الاستعلام في جدول افتراضي دون استخدام الربط بين جدولين كلما احتجنا ذلك والمثال السابق يبين ذلك.

تعديل البيانات عبر تعديل الجدول الافتراضي:

عادة ليس من الممكن تعديل البيانات عبر تطبيق التعابير Insert و Updateو Delete على الجدول الافتراضي ولكن يمكن تحقيق هذا الغرض في حالة توفرت الشروط التالية :
  • يجب ألا يحوي الاستعلام الخاص بالمنظار أي تابع تجميعي كما يجب ألا يستخدم تعبير Group By .
  • يجب الا يحتوي الاستعلام الخاص بالجدول الافتراضي التعبير Top او Distinict .
  • يجب الا يحتوي الاستعلام الخاص بالجدول الافتراضي حقول تم اجراء عمليات حسابية عليها او تم حسابها .

لتعديل بنية جدول افتراضي نستخدم الصيغة /

ALTER VIEW viewName AS newQuery;

وهذه الصيغة تعمل في SQL Server اما في Oracle فتكون الصيغة كما يلي 

CREATE OR REPLACE VIEW viewName AS newQuery

انتبه ملاحظة :

  • يستخدم التعبير ALTER VIEW في Oracle و DB2 لأداء اغراض مختلفة عن تلك المستخدمة في SQL Server .
  • افضل طريقة لتعديل جدول افتراضي في DB2 هي حذفه واعادة انشاءه بالشكل المطلوب من جديد.
  • في MySQL لم تكن المعاينات مدعومة قبل النسخة 5.0.1 ولكن تم اضافتها وهي تستخدم صيغة مشابهه للصيغة المستخدمة في SQL Server .


مثال

اذا كان لدينا الجدول Studio الذي يحتوي على اسماء وارقام الاستوديوهات studioNumber , studioName وارقام البرامج programNumber التي سوف تُصور في مركز تلفزيوني .. واذا كان لدينا الجدول Actors الذي يحتوي على اسماء الممثلين ActorName واسماء البرامج التي يشتركون في تمثيلها programName واذا اردنا تعديل بنية الجدول الافتراضي ActorsStudios في SQL Server و MySQL تصبح الصيغة كالآتي :

ALTER VIEW ActorsStudios AS
Select actorName , studioName from Actors Inner Join Studios
ON Studios.studioNumber = Actors.studioNumber;

ويصبح المثال في Oracle كما يلي :
CREATE OR REPLACE VIEW ActorsStudios AS
Select actorName , studioName from Actors Inner Join Studios
ON Studios.studioNumber = Actors.studioNumber;

حذف الجداول الافتراضية :

يمكننا حذف الجدول الافتراضي بصورة كاملة من قاعدة البيانات باستخدام التعبير DROP VIEW وحذفه لا يعني حذف الاصول او الجداول الاساسية التي دخلت في الاستعلام الذي انشأ الجدول الافتراضي.

ونستخدم ذلك بالصيغة التالية :
DROP VIEW viewName;

مثال اذا اردنا حذف مثلا الجدول الافتراضي الذي اسمة MyView سنكتب الصيغة كما يلي:

DROP VIEW MyView;

مشاركة

أضف تعليق:

0 comments: