تستعرض هذه المقالة عددا من مواضيع SQL، مثل كيفية تصميم جداول قواعد البيانات، واستخدام المرادفات، وكيفية استخلاص المعلومات المتعلقة بقاعدة البيانات عبر معلومات المخطط، والترتيب الذي تُنفّذ وفقه عبارات واستعلامات SQL.
تصميم الجداول Table Design
لا تنحصر وظائف أنظمة قواعد البيانات العلائقية في عرض البيانات في الجداول، وكتابة عبارات SQL لسحب تلك البيانات.
إن كان تصميم الجداول سيئًا، فقد يؤدي ذلك إلى إبطاء تنفيذ الاستعلامات، ويمكن أن يؤثر على عمل قاعدة البيانات، بحيث لا تعمل كما هو متوقع. لذا لا ينبغي النظر إلى جداول قاعدة البيانات كما لو كانت مجرد جداول عادية؛ إذ يتوجّب أن تتّبع مجموعة من القواعد حتى تكون علائقية حقًّا.
هذه هي القواعد الخمسة التي ينبغي أن تتوفّر في أيّ جدول علائقي:
- أن تكون كل القيم ذرّية (atomic)، أي يجب أن تكون قيمة كل حقل من كل صفّ قيمة واحدة.
- يجب أن تنتمي بيانات كل حقل إلى نفس نوع البيانات.
- يجب أن يكون لكل حقل اسمًا فريدًا.
- يجب أن يحتوي كل صفّ في الجدول على قيمة واحدة على الأقل تجعله متفرّدًا عن السجلات الأخرى في الجدول.
- لا ينبغي أن يكون لترتيب الصفوف والأعمدة أيّ تأثير.
هذا مثال على جدول يتوافق مع القواعد الخمس أعلاه:
Id | Name | DOB | Manager |
---|---|---|---|
1 | Fred | 11/02/1971 | 3 |
2 | Fred | 11/02/1971 | 3 |
3 | Sue | 08/07/1975 | 2 |
لنتحقق من القواعد السابقة:
-
القاعدة 1: كل القيم ذرّية. إذ لا تحتوِي الحقول
Id
وName
وDOB
وManager
إلّا قيمًا مُنفردة (single) فقط. -
القاعدة 2: لا يحتوي الحقل
Id
إلّا على الأعداد الصحيحة، فيما يحتوي الحقلName
حصرًا على القيم النصية (يمكننا إضافة أنها جميعًا تتألف من أربعة أحرف أو أقل)، فيما يحتوي الحقلDOB
على تواريخ من نوع صالح، ويحتوي الحقلManager
على أعداد صحيحة (يمكننا إضافة أنّها تتوافق مع حقل المفاتيح الرئيسية في جدول المدراء managers). -
القاعدة 3:
Id
وName
وDOB
وManager
هي أسماء عناوين فريدة للحقول داخل الجدول. -
القاعدة 4: يميّز الحقل
Id
كلّ السجلّات، ويجعل كلّ سجلّ مختلفًا عن السجلات الأخرى داخل الجدول.
هذا مثال على جدول ذي تصميم سيء:
Id | Name | DOB | Name |
---|---|---|---|
1 | Fred | 11/02/1971 | 3 |
1 | Fred | 11/02/1971 | 3 |
3 | Sue | Friday the 18th July 1975 | 2, 1 |
لنتحقق من القواعد السابقة:
- القاعدة 1: يحتوي الحقل الثاني على قيمتين، 2 و 1.
-
القاعدة 2: يحتوي الحقل
DOB
على نوعي بيانات مختلفين، نوع التاريخ، ونوع النصوص. - القاعدة 3: هناك حقلان لهما الاسم نفسه ("name").
- القاعدة 4: السجل الأول والثاني متماثلان تمامًا.
- القاعدة 5: هذه القاعدة مُستوفاة.
المرادفات Synonyms
المرادف (Synonym) هو كُنية أو اسم بديل لكائن في قاعدة بيانات، هذا الكائن قد يكون جدولًا أو معرضًا أو إجراءًا مُخزّنًا، أو سلسلة …إلخ.
يوضّح المثال التالي كيفية إنشاء المرادفات:
CREATE SYNONYM EmployeeData FOR MyDatabase.dbo.Employees
مخطط المعلومات Information Schema
مخطّط المعلومات (Information Schema) هو استعلام يوفّر معلومات مفيدة للمستخدمين النهائيين عن أنظمة إدارة قواعد البيانات (RDBMS).
تتيح مثل هذه الاستعلامات للمستخدمين إمكانية العثور السريع على جداول قاعدة البيانات التي تحتوي أعمدة معيّنة، كما يحدث عندما ترغب في ربط البيانات من جدولين بشكل غير مباشر عبر جدول ثالث دون معرفة مُسبقة بالجداول التي قد تحتوي على مفاتيح أو أعمدة أخرى مشتركة مع الجداول المستهدفة.
يستخدم المثال التالي تعبيرًا T-SQL، ويبحث عن مخطّط المعلومات الخاصّ بقاعدة البيانات:
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE '%Institution%'
تحتوي النتيجة على قائمة بالأعمدة المُطابقة، وأسماء جداولها، ومعلومات أخرى مفيدة.
ترتيب التنفيذ Order of Execution
تُنفّذ عبارات استعلامات SQL وفق ترتيب محدّد. تستعرض هذه الفقرة هذا الترتيب:
/*(8)*/ SELECT /*9*/ DISTINCT /*11*/ TOP /*(1)*/ FROM /*(3)*/ JOIN /*(2)*/ ON /*(4)*/ WHERE /*(5)*/ GROUP BY /*(6)*/ WITH {CUBE | ROLLUP} /*(7)*/ HAVING /*(10)*/ ORDER BY /*(11)*/ LIMIT
إليك الترتيب الذي تتم به معالجة الاستعلامات، مع وصف مختصر لكلّ منها (تشير VT إلى "Virtual Table" أي جدول وهمي، وتوضّح كيف يتم إنتاج مختلف البيانات أثناء معالجة الاستعلام):
-
FROM
: تنفّذ جداء ديكارتي (ضمّ متقاطع cross join) بين الجدولين الأولين في عبارة FROM، ونتيجة لذلك، يُنشأ جدول وهمي VT1 -
ON
: ترشِّح الجدول الوهمي VT1. ولا تُدرج إلا الصفوف التي تعيدTRUE
إلى الجدول الوهميVT2
. -
OUTER
: في حال الضمّ الخارجيOUTER JOIN
(على عكس الضمّ المتقاطعCROSS JOIN
أو الضمّ الداخليINNER JOIN
)، تُضاف صفوف الجدول أو الجداول المحفوظة (preserved table) التي لم يُعثَر فيها على تطابق إلى صفوف الجدول الوهميVT2
كصفوف خارجية، وينتُج عن ذلك الجدولVT3
. في حال كان هناك أكثر من جدولين في عبارةFROM
، تُطبَّق الخطوات من 1 إلى 3 بشكل متكرر بين نتيجة عملية الضمّ الأخيرة والجدول التالي في عبارةFROM
إلى أن تُعالج جميع الجداول. -
WHERE
: ترشِّح الجدولVT3
. ولا تُدرج إلا الصفوف التي تعيدTRUE
إلى الجدولVT4
-
GROUP BY
: تُقسّم صفوف الجدول الوهميVT4
إلى مجموعات بناءً على قائمة الأعمدة المحدّدة في عبارةGROUP BY
. وينجم عن ذلك إنشاء جدولVT5
. -
CUBE | ROLLUP
: تُضاف مجموعات أجزاء - Supergroups - (مجموعات مؤلّفة من مجموعات) إلى صفوفVT5
، وينتُج الجدول الوهميVT6
. -
HAVING
: ترشِّح الجدولVT6
. ولا تُدرج إلا المجموعات التي تعيد القيمةTRUE
إلى الجدولVT7
. -
SELECT
: تُعالج قائمةSELECT
، ويُنشأ الجدولVT8
. -
DISTINCT
: تُزال الصفوف المكرّرة منVT8
. ويُنشأ الجدولVT9
. -
ORDER BY
: تُرتَّب صفوف الجدولVT9
وفقًا لقائمة الأعمدة المحدّدة في عبارةORDER BY
، كما يُنشأ مُؤشّر - cursor - (VC10
). -
TOP
: يُختار العدد أو النّسبة المئوية المحدّدة من الصفوف من بداية الجدولVC10
. ويُنشأ الجدولVT11
ثُم يُعاد إلى المُستدعي - caller - (العبارةLIMIT
لها نفس وظيفةTOP
في بعض لهجات SQL، مثل Postgres و Netezza.)
ترجمة -وبتصرّف- للفصول من 57 إلى 60 من الكتاب SQL Notes for Professionals
اقرأ أيضًا:
- المقال التالي: تنظيم شيفرات SQL وتأمينها
- المقال السابق: الاستعلامات الفرعية والإجراءات في SQL
- النسخة العربية الكاملة من كتاب ملاحظات للعاملين بلغة SQL 1.0.0
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.