التطبيق الرئيسي للجبر العلائقي هو توفير أساس نظري لقواعد البيانات العلائقية، وخاصة لغات الاستعلام لمثل قواعد البيانات هذه، وأهمها لغة الاستعلامات المهيكلة SQL. تخزن قواعد البيانات العلائقية البيانات الجدولية الممثلة في صورة علاقات relations. غالبًا ما تُرجع الاستعلامات عبر قواعد البيانات العلائقية أيضًا بيانات جدولية ممثلة في صورة علاقات.
الغرض الرئيسي من الجبر العلائقي هو تحديد المشغلات (أو المؤثرات operators) التي تحول علاقة دخل واحدة أو أكثر إلى علاقة خرج. وبما أن هذه المؤثرات تقبل العلاقات كمدخلات وتنتج العلاقات كمخرجات، فمن الممكن دمجها واستخدامها للتعبير عن استعلامات معقدة تعمل على تحويل علاقات الإدخال المتعددة (التي يجري تخزين بياناتها في قاعدة البيانات) إلى علاقة إخراج واحدة (تُمثل نتائج الاستعلام).
تقبل المشغلات الأحادية علاقة واحدة كمدخل لها. تتضمن الأمثلة عوامل لتصفية سمات معينة (أعمدة) أو مجموعات (صفوف) من علاقة إدخال. تقبل المشغلات الثنائية علاقتين كمدخلات وتجمعهما في علاقة إخراج واحدة. على سبيل المثال، أخذ جميع الثنائيات الموجودة في أي علاقة ( اتحاد )، وإزالة الثنائيات من العلاقة الأولى الموجودة في العلاقة الثانية ( الفرق )، وتوسيع ثنائيات العلاقة الأولى بثنائيات في العلاقة الثانية تطابق شروطًا معينة، وهكذا.
مقدمة
لم يحظ الجبر العلائقي باهتمام كبير خارج نطاق الرياضيات البحتة حتى نُشر نموذج إي إف كود للعلاقات البيانات في عام 1970. اقترح إدجار كود مثل هذا الجبر كأساس للغات استعلام قواعد البيانات.
يعمل الجبر العلائقي على مجموعات متجانسة من الثنائيات حيث نفسر عادةً m على أنه عدد صفوف العناصر في الجدول و n على أنه عدد الأعمدة. جميع الإدخالات في كل عمود لها نفس النوع type.
تحتوي العلاقة أيضًا على عنصر فريد يسمى الرأسheader والذي يمنح كل عمود اسمًا أو سمة فريدة attribute داخل العلاقة. تُستخدم السمات في الإسقاطات والتحديدات.
بالنسبة لاتحاد المجموعات وفرق المجموعات، يجب أن تكون العلاقتان المعنيتان متوافقتين مع الاتحاد - أي يجب أن يكون للعلاقتين نفس مجموعة السمات. نظرًا لأن تقاطع المجموعات يمكن تعريفه بدلالة اتحاد المجموعات وفرق المجموعات، فيجب أن تكون العلاقتان المتضمنتان في تقاطع المجموعات متوافقتين مع الاتحاد أيضًا.
لكي يمكن تعريف حاصل الجداء الديكارتي، يجب أن يكون للعلاقتين المعنيتين رؤوس منفصلة - أي أنه لا يجب أن يكون لهما اسم سمة مشترك.
بالإضافة إلى ذلك، يمكن تعريف الناتج الديكارتي بشكل مختلف عن الناتج الموجود في نظرية المجموعات بمعنى أن المجموعات تعتبر "سطحية shallow" لأغراض العملية. وهذا يعني أن حاصل الجداء الديكارتي لمجموعة من n-أزواج مع مجموعة من m-أزواج يعطي مجموعة من "المسطحات" (n + m)-أزواج (بينما كانت نظرية المجموعات الأساسية قد وصفت مجموعة من 2 من الأزواج، كل منها يحتوي على n-أزواج و m-أزواج). وبشكل أكثر رسمية، يمكن تعريف R × S على النحو التالي:
عدد عناصر حاصل الضرب الديكارتي هو حاصل ضرب عدد عناصر عوامله، أي | R × S | = | R | × | S |.
الإسقاط
الإسقاطprojection ( Π ) هو عملية أحادية مكتوبة على النحو التالي حيث هي مجموعة من أسماء السمات. يمكن تعريف نتيجة هذا الإسقاط على أنها المجموعة التي نحصل عليها عندما يجري تقييد جميع الثنائيات في R بالمجموعة .
ملاحظة: عند التنفيذ في معيار لغة الاستعلامات المهيكلة SQL، يقوم "الإسقاط الافتراضي" بإرجاع مجموعة متعددة multiset بدلاً من مجموعة، ويمكن الحصول على إسقاط Π لإزالة البيانات المكررة عن طريق إضافة الكلمة الأساسية DISTINCT (أي DISTINCT keyword).
الاختيار المعمم generalized selection ( σ ) هو عملية أحادية مكتوبة على النحو التالي حيث φ هي صيغة اقتراحية propositional formula تتكون من ذرات atomsكما هو مسموح به في الاختيار الطبيعي normal selection والمؤشرات المنطقية ∧
للحصول على قائمة بجميع الأصدقاء أو شركاء العمل في دفتر العناوين، يمكن كتابة الاختيار على النحو التالي . ستكون النتيجة هي علاقة تحتوي على كل سمة من سمات كل سجل فريد حيث يكون isFriend صحيحًا أو حيث يكون isBusinessContact صحيحًا.
إعادة التسمية
إعادة التسمية ( ρ ) أو rename هي عملية أحادية مكتوبة على النحو التالي حيث تكون النتيجة متطابقة مع R باستثناء أن السمة b في جميع الثنائيات يجري إعادة تسميتها إلى سمة a. يُستخدم هذا عادةً لإعادة تسمية سمة العلاقة لغرض الانضمام.
لإعادة تسمية السمة "isFriend" إلى "isBusinessContact" في علاقة، قد ييجري استخدامها.
هناك أيضا تدوين ، حيث يمكن إعادة تسمية R إلى x والسمات يجري إعادة تسميتها إلى .[2]
مؤشرات الارتباط والشبيهة بالارتباط
الارتباط الطبيعي
الارتباط الطبيعي (⨝) (بالإنجليزية Natural join) هو علاقة ثنائية تُكتب على هيئة ( R ⨝ S ) حيث R و S هما علاقات. [ا] نتيجة الارتباط الطبيعي هي مجموعة كل مجموعات العناصر في R و S المتساوية في أسماء السمات المشتركة. على سبيل المثال، ضع في اعتبارك الجداول الموظفين Employee والقِسم Dept وارتباطهما الطبيعي:
Employee
Name
EmpId
DeptName
Harry
3415
Finance
Sally
2241
Sales
George
3401
Finance
Harriet
2202
Sales
Mary
1257
Human Resources
Dept
DeptName
Manager
Finance
George
Sales
Harriet
Production
Charles
Employee ⨝ Dept
Name
EmpId
DeptName
Manager
Harry
3415
Finance
George
Sally
2241
Sales
Harriet
George
3401
Finance
George
Harriet
2202
Sales
Harriet
لاحظ أنه لا الموظفة المسماة ماري Mary ولا قسم الإنتاج Production يظهران في النتيجة.
يمكن أيضًا استخدام هذا لتحديد تكوين العلاقات composition of relations. على سبيل المثال، تكوين علاقة الموظفوالقسم هو ارتباطهما كما هو موضح أعلاه، ويمكن إسقاطه على جميع السمات باستثناء السمة المشتركة DeptName. في نظرية الفئة، فإن الارتباط join هو على وجه التحديد منتج الألياف fiber product.
يمكن القول أن الارتباط الطبيعي هو أحد أهم المؤشرات لأنه النظير العلائقي لمؤشر AND المنطقي. لاحظ أنه إذا ظهر نفس المتغير في كل من المسندين المرتبطين بواسطة AND، فإن هذا المتغير يمثل نفس الشيء ويجب دائمًا استبدال كلا الظهورين بنفس القيمة (وهذا نتيجة لتساوي قوى AND المنطقية). على وجه الخصوص، يسمح الانضمام الطبيعي بدمج العلاقات المرتبطة بمفتاح خارجي. على سبيل المثال، في المثال أعلاه، من المحتمل أن يكون المفتاح الخارجي صالحًا من Employee.DeptName إلى Dept.DeptName ثم الانضمام الطبيعي للموظف والقسم يجمع بين جميع الموظفين وأقسامهم. يعمل هذا لأن المفتاح الخارجي يربط بين السمات التي تحمل نفس الاسم. إذا لم يكن هذا هو الحال كما هو الحال في المفتاح الخارجي من مديرالقسمDept.Manager إلى اسم الموظفEmployee.Name. ثم يجب إعادة تسمية هذه الأعمدة قبل اتخاذ الانضمام الطبيعي. يُشار إلى مثل هذا الانضمام أحيانًا باسم الانضمام المتساويequijoin.
بصورة أكثر رسمية، يمكن تعريف دلالات الارتباط الطبيعي على النحو التالي:
حيث Fun(t) هو مسندpredicate صحيح لعلاقة t (بالمعنى الرياضي) إذا كانت t دالة (أي أن t لا تقوم بتعيين أي سمة لقيم متعددة). من المعتاد أن يكون مطلوبًا أن يكون لدى R و S سمة مشتركة واحدة على الأقل، ولكن إذا جرى حذف هذا القيد، ولم يكن لدى R و S أي سمات مشتركة، فإن الارتباط الطبيعي يصبح هو حاصل الضرب الديكارتي تمامًا.
يمكن محاكاة الارتباط الطبيعي باستخدام بدائيات كوود Codd's primitives على النحو التالي. افترض أن c1،...، cm هي أسماء السمات المشتركة بين R و S، وأن r1،...، rn هي أسماء السمات الفريدة لـ R وأن s1،...، sk هي أسماء السمات الفريدة لـ S. علاوة على ذلك، افترض أن أسماء السمات x1،...، xm لا توجد في R ولا في S. في الخطوة الأولى، يمكن إعادة تسمية أسماء السمات المشتركة في S كالتالي:
بالنظر إلى جداول السيارة و القارب التي تسرد قائمة نماذج من السيارات والقوارب وأسعار كل منها. لنفترض أن أحد العملاء يريد شراء سيارة وقارب، لكنه لا يريد إنفاق أموال على القارب أكثر من الإنفاق على السيارة. وبالتالي يكون θ-join (⋈θ) على المسندسعر السيارة ≥ سعر القارب تُنتج أزواج مُسطحة من الصفوف التي تُحقق ذلك المسند. عند استخدام شرط تكون فيه السمات متساوية، على سبيل المثال السعر، يمكن تحديد الشرط على النحو التالي السعر=السعر
أو بدلا من ذلك (السعر) نفسها.
Car
CarModel
CarPrice
CarA
20,000
CarB
30,000
CarC
50,000
Boat
BoatModel
BoatPrice
Boat1
10,000
Boat2
40,000
Boat3
60,000
CarModel
CarPrice
BoatModel
BoatPrice
CarA
20,000
Boat1
10,000
CarB
30,000
Boat1
10,000
CarC
50,000
Boat1
10,000
CarC
50,000
Boat2
40,000
من أجل دمج العناصر من علاقتين حيث لا يكون شرط الدمج ببساطة هو مساواة السمات المشتركة، فمن المناسب أن يكون لدينا شكل أكثر عمومية لمؤشر الارتباط join operator، وهو θ-join (أو theta-join). حيث θ-join هو عامل ثنائي مكتوب على النحو التالي أو حيث أن a و b هما اسما سمة، وθ هو عامل علاقات ثنائية في المجموعة {<, ≤, =, ≠, >, ≥ }، و υ هو ثابت القيمة، و R و S هما علاقات. تتكون نتيجة هذه العملية من جميع مجموعات الثنائيات في R و S التي تلبي θ. يمكن تعريف نتيجة θ-join فقط إذا كانت رؤوس S و R منفصلة، أي لا تحتوي على سمة مشتركة.
وبالتالي فإن محاكاة هذه العملية في العمليات الأساسية تكون على النحو التالي :
R ⋈ θS = σ θ ( R × S )
في حالة أن العامل θ هو عامل المساواة (=)، فإن هذا الارتباط يسمى أيضًا ارتباطًا متساويًاequijoin.
ومع ذلك، لاحظ أن لغة الحاسوب التي تدعم مؤشر الارتباط والاختيار الطبيعيين لا تحتاج إلى θ-join أيضًا، حيث يمكن تحقيق ذلك عن طريق الاختيار من نتيجة الارتباط الطبيعي (الذي يتحول إلى حاصل ضرب ديكارت عندما لا توجد سمات مشتركة).
في تنفيذات SQL، يُطلق على الارتباط إلى مسند عادةً اسم الارتباط الداخلي، وتسمح الكلمة الأساسية on بتحديد المسند المستخدم لتصفية الصفوف. من المهم ملاحظة: إن تشكيل المنتج الديكارتي المسطح ثم تصفية الصفوف صحيح من الناحية المفاهيمية، ولكن التنفيذ سيستخدم هياكل بيانات أكثر تطوراً لتسريع استعلام الارتباط.
شبه الارتباط
إن شبه الارتباط الأيسر left semijoin (⋉ و⋊) هو ارتباط مشابه للارتباط الطبيعي ومكتوب على النحو التالي حيث و هي علاقات. [ب] النتيجة هي مجموعة كل الثنائيات في حيث يوجد مجموعة في حيث يتساويان في أسماء صفاتهما المشتركة. الفرق عن الارتباط الطبيعي هو أن الأعمدة الأخرى من لا تظهر. على سبيل المثال، ضع في اعتبارك جداول الموظف والقِسم Employee و Dept وشبه الارتباط الخاص بهما:
Employee
Name
EmpId
DeptName
Harry
3415
Finance
Sally
2241
Sales
George
3401
Finance
Harriet
2202
Production
Dept
DeptName
Manager
Sales
Sally
Production
Harriet
Employee ⋉ Dept
Name
EmpId
DeptName
Sally
2241
Sales
Harriet
2202
Production
بشكل أكثر رسمية، يمكن تعريف دلالات شبه الارتباط على النحو التالي:
حيث كما هو الحال في تعريف الانضمام الطبيعي.
يمكن محاكاة شبه الارتباط باستخدام الارتباط الطبيعي على النحو التالي. إذا كانت هي أسماء سمات ، فإن
نظرًا لأننا نستطيع محاكاة الارتباط الطبيعي باستخدام المؤشرات الأساسية، فمن الطبيعي أن ينطبق هذا أيضًا على الارتباط الجزئي.
في ورقة كوود عام 1970، يسمى الارتباط الجزئي التقييد restriction.[1]
الارتباط المضاد
الارتباط المضاد (▷) (بالإنجليزية antijoin)، يُكتب على هيئة R ▷ S حيث R و S علاقات، [ج] يشبه شبه الارتباط، ولكن نتيجة الارتباط المضاد هي فقط تلك الثنائيات في R التي لا يوجد لها ثنائي في S متساوٍ في أسماء السمات المشتركة بينهما.
على سبيل المثال، ضع في اعتبارك جداول الموظفين Employee والقسم Dept والارتباط المضاد antijoin الخاصة بهما:
Employee
Name
EmpId
DeptName
Harry
3415
Finance
Sally
2241
Sales
George
3401
Finance
Harriet
2202
Production
Dept
DeptName
Manager
Sales
Sally
Production
Harriet
Employee ▷ Dept
Name
EmpId
DeptName
Harry
3415
Finance
George
3401
Finance
يمكن تعريف مضاد الارتباط antijoin رسميًا على النحو التالي:
R ▷ S = { t : t ∈ R ∧ ¬∃s ∈ S(Fun (t ∪ s))}
أو
R ▷ S = { t : t ∈ R, there is no tuple s of S that satisfies Fun (t ∪ s)}
حيث Fun (t ∪ s) كما هو الحال في تعريف الارتباط الطبيعي.
يمكن أيضًا تعريف الارتباط المضاد باعتباره المكمل لشبيه الارتباط، على النحو التالي:
ونظراً لهذا، يُطلق على مضاد الارتباط antijoin أحيانًا اسم anti-semijoin أي مضاد شبيه الارتباط، ويُكتب عامل مضاد الارتباط antijoin أحيانًا على هيئة رمز شبيه الارتباط semijoin مع شريط فوقه، بدلاً من ▷.
في الحالة التي يكون فيها للعلاقات نفس السمات (متوافقة مع الاتحاد)، فإن مضاد الارتباط antijoin هو نفسه الطرح.
القسمة
القسمة (÷) هي عملية ثنائية تُكتب على هيئة R ÷ S. ولا يجري تنفيذ القسمة بشكل مباشر في SQL. تتكون النتيجة من قيود العناصر الثنائية في R على أسماء السمات الفريدة لـ R، أي في رأس R ولكن ليس في رأس S، حيث تنص على أن جميع مجموعاتها مع العناصر الثنائية في S موجودة في R.
مثال
Completed
Student
Task
Fred
Database1
Fred
Database2
Fred
Compiler1
Eugene
Database1
Eugene
Compiler1
Sarah
Database1
Sarah
Database2
DBProject
Task
Database1
Database2
Completed ÷ DBProject
Student
Fred
Sarah
إذا كان جدول DBProject يحتوي على جميع مهام مشروع قاعدة البيانات، فإن نتيجة القسمة أعلاه تحتوي بالضبط على الطلاب الذين أكملوا كلتا المهمتين في مشروع قاعدة البيانات. بصورة أكثر رسمية، يمكن تعريف دلالات القسمة على النحو التالي:
R ÷ S = { t[a1,...,an] : t ∈ R ∧ ∀s ∈ S ( (t[a1,...,an] ∪ s) ∈ R) }
حيث { a1 ,..., an } هي مجموعة أسماء السمات الفريدة لـ R و t [ a1 ,..., an ] هو تقييد t لهذه المجموعة. من المعتاد أن يكون مطلوبًا أن تكون أسماء السمات في رأس S هي مجموعة فرعية من أسماء R لأنه بخلاف ذلك ستكون نتيجة العملية فارغة دائمًا.
يجري محاكاة عملية القسمة مع العمليات الأساسية على النحو التالي. نفترض أن a1،...، an هي أسماء السمات الفريدة لـ R وأن b1،...، bm هي أسماء السمات الخاصة بـ S. في الخطوة الأولى، نقوم بإسقاط R على أسماء السمات الفريدة الخاصة بها وإنشاء جميع التركيبات التي تحتوي على مجموعات في S :
T := πa1,...,an(R) × S
في المثال السابق، سيمثل T جدولاً بحيث يجري دمج كل طالب (لأن الطالب هو المفتاح/السمة الفريدة للجدول المكتمل) مع كل مهمة معينة. على سبيل المثال، سيكون لدى Eugene صفين، Eugene → Database1 و Eugene → Database2 في T.
على سبيل المثال: أولاً، لنفترض أن "مكتمل Completed" لديه سمة ثالثة تسمى "الدرجة grade". فهي غير مرغوب فيها هنا، لذلك يجب علينا إسقاطها دائمًا. في الواقع، في هذه الخطوة يمكننا إسقاط "Task" من R أيضًا؛ حيث تقوم عملية الضرب بإعادتها مرة أخرى.
T := πStudent(R) × S // هذا يعطينا كل تركيبة مرغوبة ممكنة، بما في ذلك تلك التي لا توجد بالفعل في R، واستبعاد التركيبات الأخرى (على سبيل المثال Fred | compiler1، وهي ليست تركيبة مرغوبة)
T
Student
Task
Fred
Database1
Fred
Database2
Eugene
Database1
Eugene
Database2
Sarah
Database1
Sarah
Database2
في الخطوة التالية نطرح R من T
العلاقة :
U := T − R
في U لدينا التركيبات الممكنة التي "كان من الممكن" أن تكون في R، ولكنها لم تكن كذلك.
الامتدادات الشائعة
في الممارسة العملية، يجري توسيع الجبر العلائقي التقليدي الموصوف أعلاه من خلال عمليات مختلفة مثل الارتباطات الخارجية والوظائف التجميعية وحتى الإغلاق المتعدي.[3]
^Silberschatz، Abraham؛ Henry F. Korth؛ S. Sudarshan (2020). Database system concepts (ط. Seventh). New York. ص. 56. ISBN:978-0-07-802215-9. OCLC:1080554130.{{استشهاد بكتاب}}: صيانة الاستشهاد: مكان بدون ناشر (link)
Query Optimization This paper is an introduction into the use of the relational algebra in optimizing queries, and includes numerous citations for more in-depth study.