الجبر العلائقي

في نظرية قاعدة البيانات، **الجبر العلائقي** **** هو نظرية تستخدم الهياكل الجبرية لنمذجة البيانات وتحديد الاستعلامات عليها باستخدام دلالات جيدة التأسيس. قدَّم إدغار ف كوود هذه النظرية.

التطبيق الرئيسي للجبر العلائقي هو توفير أساس نظري لقواعد البيانات العلائقية، وخاصة لغات الاستعلام لمثل قواعد البيانات هذه، وأهمها لغة الاستعلامات المهيكلة SQL. تخزن قواعد البيانات العلائقية البيانات الجدولية الممثلة في صورة علاقات relations. غالبًا ما تُرجع الاستعلامات عبر قواعد البيانات العلائقية أيضًا بيانات جدولية ممثلة في صورة علاقات.

الغرض الرئيسي من الجبر العلائقي هو تحديد المشغلات (أو المؤثرات operators) التي تحول علاقة دخل واحدة أو أكثر إلى علاقة خرج. وبما أن هذه المؤثرات تقبل العلاقات كمدخلات وتنتج العلاقات كمخرجات، فمن الممكن دمجها واستخدامها للتعبير عن استعلامات معقدة تعمل على تحويل علاقات الإدخال المتعددة (التي يجري تخزين بياناتها في قاعدة البيانات) إلى علاقة إخراج واحدة (تُمثل نتائج الاستعلام).

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

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

يعمل الجبر العلائقي على مجموعات متجانسة من الثنائيات S = \{(s_{j1},s_{j2},... s_{jn}) | j \in 1... m \}  حيث نفسر عادةً *m* على أنه عدد صفوف العناصر في الجدول و *n* على أنه عدد الأعمدة. جميع الإدخالات في كل عمود لها نفس النوع type.

تحتوي العلاقة أيضًا على عنصر فريد يسمى **الرأس** **header** والذي يمنح كل عمود اسمًا أو **سمة** فريدة **attribute** داخل العلاقة. تُستخدم السمات في الإسقاطات والتحديدات.

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

بالنسبة لاتحاد المجموعات وفرق المجموعات، يجب أن تكون العلاقتان المعنيتان *متوافقتين مع الاتحاد* - أي يجب أن يكون للعلاقتين نفس مجموعة السمات. نظرًا لأن تقاطع المجموعات يمكن تعريفه بدلالة اتحاد المجموعات وفرق المجموعات، فيجب أن تكون العلاقتان المتضمنتان في تقاطع المجموعات متوافقتين مع الاتحاد أيضًا.

لكي يمكن تعريف حاصل الجداء الديكارتي، يجب أن يكون للعلاقتين المعنيتين رؤوس منفصلة - أي أنه لا يجب أن يكون لهما اسم سمة مشترك.

بالإضافة إلى ذلك، يمكن تعريف الناتج الديكارتي بشكل مختلف عن الناتج الموجود في نظرية المجموعات بمعنى أن المجموعات تعتبر "سطحية shallow" لأغراض العملية. وهذا يعني أن حاصل الجداء الديكارتي لمجموعة من *n-*أزواج مع مجموعة من *m-*أزواج يعطي مجموعة من "المسطحات" -أزواج (بينما كانت نظرية المجموعات الأساسية قد وصفت مجموعة من 2 من الأزواج، كل منها يحتوي على *n-*أزواج و *m-*أزواج). وبشكل أكثر رسمية، يمكن تعريف *R* × *S* على النحو التالي:

R\times S:=\{(r_1,r_2,\dots,r_n,s_1,s_2,\dots,s_m)|(r_1,r_2,\dots,r_n)\in R, (s_1,s_2,\dots,s_m)\in S\}

عدد عناصر حاصل الضرب الديكارتي هو حاصل ضرب عدد عناصر عوامله، أي | *R* × *S* | = | *R* | × | *S* |.

## الإسقاط
**الإسقاط** **projection** (  ) هو عملية أحادية مكتوبة على النحو التالي \Pi_{a_1, \ldots,a_n}( R ) حيث a_1,\ldots,a_n هي مجموعة من أسماء السمات. يمكن تعريف نتيجة هذا الإسقاط على أنها المجموعة التي نحصل عليها عندما يجري تقييد جميع الثنائيات في *R* بالمجموعة \{a_1,\ldots,a_n\}.

ملاحظة: عند التنفيذ في معيار لغة الاستعلامات المهيكلة SQL، يقوم "الإسقاط الافتراضي" بإرجاع مجموعة متعددة multiset بدلاً من مجموعة، ويمكن الحصول على إسقاط  لإزالة البيانات المكررة عن طريق إضافة الكلمة الأساسية DISTINCT (أي <code>DISTINCT</code> keyword).

## الاختيار
**الاختيار المعمم generalized selection** ( σ ) هو عملية أحادية مكتوبة على النحو التالي \sigma_\varphi(R) حيث φ هي صيغة اقتراحية propositional formula تتكون من ذرات atomsكما هو مسموح به في الاختيار الطبيعي normal selection والمؤشرات المنطقية ∧
 (and),  (or) and  (negation). يقوم هذا الاختيار بتحديد كل تلك المجموعات في *R* التي تحتوي على φ.

للحصول على قائمة بجميع الأصدقاء أو شركاء العمل في دفتر العناوين، يمكن كتابة الاختيار على النحو التالي \sigma_{\text{isFriend = true} \,\lor\, \text{isBusinessContact = true}}( \text{addressBook} ). ستكون النتيجة هي علاقة تحتوي على كل سمة من سمات كل سجل فريد حيث يكون  صحيحًا أو حيث يكون  صحيحًا.

## إعادة التسمية
 
**إعادة التسمية** ( *ρ* ) أو **rename** هي عملية أحادية مكتوبة على النحو التالي \rho_{a / b}(R) حيث تكون النتيجة متطابقة مع *R* باستثناء أن السمة *b* في جميع الثنائيات يجري إعادة تسميتها إلى سمة *a*. يُستخدم هذا عادةً لإعادة تسمية سمة العلاقة لغرض الانضمام.

لإعادة تسمية السمة "isFriend" إلى "isBusinessContact" في علاقة، \rho_{\text{isBusinessContact / isFriend} } ( \text{addressBook} ) قد ييجري استخدامها.

هناك أيضا تدوين \rho_{x(A_1, \ldots,A_n)}(R)، حيث يمكن إعادة تسمية *R* إلى *x* والسمات \{a_1,\ldots,a_n\} يجري إعادة تسميتها إلى \{A_1,\ldots,A_n\}.

## مؤشرات الارتباط والشبيهة بالارتباط
 

### الارتباط الطبيعي
الارتباط الطبيعي (⨝) (بالإنجليزية Natural join) هو علاقة ثنائية تُكتب على هيئة ( *R* ⨝ *S* ) حيث *R* و *S* هما علاقات.  نتيجة الارتباط الطبيعي هي مجموعة كل مجموعات العناصر في *R* و *S* المتساوية في أسماء السمات المشتركة. على سبيل المثال، ضع في اعتبارك الجداول الموظفين *Employee* والقِسم *Dept* وارتباطهما الطبيعي:
 

لاحظ أنه لا الموظفة المسماة ماري 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 على النحو التالي. افترض أن *c*1،...، *c**m* هي أسماء السمات المشتركة بين *R* و *S*، وأن *r*1،...، *r**n* هي أسماء السمات الفريدة لـ *R* وأن *s*1،...، *s**k* هي أسماء السمات الفريدة لـ *S.* علاوة على ذلك، افترض أن أسماء السمات *x*1،...، *x**m* لا توجد في *R* ولا في *S.* في الخطوة الأولى، يمكن إعادة تسمية أسماء السمات المشتركة في *S* كالتالي:ثم نأخذ حاصل الضرب الديكارتي ونختار المجموعات التي سيتم ضمها (ارتباطها):وأخيرًا، نتخذ إسقاطًا للتخلص من السمات التي جرى إعادة تسميتها:

### ''θ'' -join و equijoin
بالنظر إلى جداول ال*سيارة* و ال*قارب* التي تسرد قائمة نماذج من السيارات والقوارب وأسعار كل منها. لنفترض أن أحد العملاء يريد شراء سيارة وقارب، لكنه لا يريد إنفاق أموال على القارب أكثر من الإنفاق على السيارة. وبالتالي يكون *θ*-join (⋈*θ*) على المسند *سعر السيارة* ≥ *سعر القارب* تُنتج أزواج مُسطحة من الصفوف التي تُحقق ذلك المسند. عند استخدام شرط تكون فيه السمات متساوية، على سبيل المثال السعر، يمكن تحديد الشرط على النحو التالي *السعر*=*السعر*
أو بدلا من ذلك (*السعر*) نفسها.
 

من أجل دمج العناصر من علاقتين حيث لا يكون شرط الدمج ببساطة هو مساواة السمات المشتركة، فمن المناسب أن يكون لدينا شكل أكثر عمومية لمؤشر الارتباط join operator، وهو *θ*-join (أو theta-join). حيث *θ*-join هو عامل ثنائي مكتوب على النحو التالي {R\ \bowtie\ S \atop a\ \theta\ b} أو {R\ \bowtie\ S \atop a\ \theta\ v} حيث أن *a* و *b* هما اسما سمة، *وθ* هو عامل علاقات ثنائية في المجموعة  }، و *υ* هو ثابت القيمة، و *R* و *S* هما علاقات. تتكون نتيجة هذه العملية من جميع مجموعات الثنائيات في *R* و *S* التي تلبي *θ*. يمكن تعريف نتيجة *θ*-join فقط إذا كانت رؤوس *S* و *R* منفصلة، أي لا تحتوي على سمة مشتركة.

وبالتالي فإن محاكاة هذه العملية في العمليات الأساسية تكون على النحو التالي :

: *R* ⋈ *θ* *S* = *σ <sub>θ</sub>* ( *R* × *S* )

في حالة أن العامل *θ* هو عامل المساواة (=)، فإن هذا الارتباط يسمى أيضًا **ارتباطًا متساويًا** **equijoin**.

ومع ذلك، لاحظ أن لغة الحاسوب التي تدعم مؤشر الارتباط والاختيار الطبيعيين لا تحتاج إلى *θ*-join أيضًا، حيث يمكن تحقيق ذلك عن طريق الاختيار من نتيجة الارتباط الطبيعي (الذي يتحول إلى حاصل ضرب ديكارت عندما لا توجد سمات مشتركة).

في تنفيذات SQL، يُطلق على الارتباط إلى مسند عادةً اسم *الارتباط الداخلي*، وتسمح الكلمة الأساسية *on* بتحديد المسند المستخدم لتصفية الصفوف. من المهم ملاحظة: إن تشكيل المنتج الديكارتي المسطح ثم تصفية الصفوف صحيح من الناحية المفاهيمية، ولكن التنفيذ سيستخدم هياكل بيانات أكثر تطوراً لتسريع استعلام الارتباط.

### شبه الارتباط
إن شبه الارتباط الأيسر left semijoin (⋉ و⋊) هو ارتباط مشابه للارتباط الطبيعي ومكتوب على النحو التالي R \ltimes S حيث R و S هي علاقات.  النتيجة هي مجموعة كل الثنائيات في R حيث يوجد مجموعة في S حيث يتساويان في أسماء صفاتهما المشتركة. الفرق عن الارتباط الطبيعي هو أن الأعمدة الأخرى من S لا تظهر. على سبيل المثال، ضع في اعتبارك جداول الموظف والقِسم *Employee* و *Dept* وشبه الارتباط الخاص بهما:

 

بشكل أكثر رسمية، يمكن تعريف دلالات شبه الارتباط على النحو التالي:

R \ltimes S = \{ t : t \in R \land \exists s \in S(\operatorname{Fun}(t \cup s)) \}

حيث \operatorname{Fun}(r) كما هو الحال في تعريف الانضمام الطبيعي.

يمكن محاكاة شبه الارتباط باستخدام الارتباط الطبيعي على النحو التالي. إذا كانت a_1, \ldots, a_n هي أسماء سمات R، فإن

R \ltimes S = \Pi_{a_1, \ldots, a_n}(R \bowtie S).

نظرًا لأننا نستطيع محاكاة الارتباط الطبيعي باستخدام المؤشرات الأساسية، فمن الطبيعي أن ينطبق هذا أيضًا على الارتباط الجزئي.

في ورقة كوود عام 1970، يسمى الارتباط الجزئي التقييد restriction.

### الارتباط المضاد
الارتباط المضاد (▷) (بالإنجليزية antijoin)، يُكتب على هيئة *R* ▷ *S* حيث *R* و *S* علاقات،  يشبه شبه الارتباط، ولكن نتيجة الارتباط المضاد هي فقط تلك الثنائيات في *R* التي *لا* يوجد لها ثنائي في *S* متساوٍ في أسماء السمات المشتركة بينهما.

على سبيل المثال، ضع في اعتبارك جداول الموظفين *Employee* والقسم *Dept* والارتباط المضاد antijoin الخاصة بهما:

يمكن تعريف مضاد الارتباط antijoin رسميًا على النحو التالي:

: }

أو

: }

حيث  كما هو الحال في تعريف الارتباط الطبيعي.

يمكن أيضًا تعريف الارتباط المضاد باعتباره المكمل لشبيه الارتباط، على النحو التالي:ونظراً لهذا، يُطلق على مضاد الارتباط antijoin أحيانًا اسم anti-semijoin أي مضاد شبيه الارتباط، ويُكتب عامل مضاد الارتباط antijoin أحيانًا على هيئة رمز شبيه الارتباط semijoin مع شريط فوقه، بدلاً من ▷.

في الحالة التي يكون فيها للعلاقات نفس السمات (متوافقة مع الاتحاد)، فإن مضاد الارتباط antijoin هو نفسه الطرح.

### القسمة
القسمة (÷) هي عملية ثنائية تُكتب على هيئة *R* ÷ *S.* ولا يجري تنفيذ القسمة بشكل مباشر في SQL. تتكون النتيجة من قيود العناصر الثنائية في *R* على أسماء السمات الفريدة لـ *R*، أي في رأس *R* ولكن ليس في رأس *S*، حيث تنص على أن جميع مجموعاتها مع العناصر الثنائية في *S* موجودة في *R.*

#### مثال
 

إذا كان جدول *DBProject* يحتوي على جميع مهام مشروع قاعدة البيانات، فإن نتيجة القسمة أعلاه تحتوي بالضبط على الطلاب الذين أكملوا كلتا المهمتين في مشروع قاعدة البيانات. بصورة أكثر رسمية، يمكن تعريف دلالات القسمة على النحو التالي:حيث { *a*1 ,..., *a**n* } هي مجموعة أسماء السمات الفريدة لـ *R* و *t* [ *a*1 ,..., *a**n* ] هو تقييد *t* لهذه المجموعة. من المعتاد أن يكون مطلوبًا أن تكون أسماء السمات في رأس *S* هي مجموعة فرعية من أسماء *R* لأنه بخلاف ذلك ستكون نتيجة العملية فارغة دائمًا.

يجري محاكاة عملية القسمة مع العمليات الأساسية على النحو التالي. نفترض أن a1 *،*...، *a**n* هي أسماء السمات الفريدة لـ *R* وأن *b*1،...، *b**m* هي أسماء السمات الخاصة بـ *S.* في الخطوة الأولى، نقوم بإسقاط *R* على أسماء السمات الفريدة الخاصة بها وإنشاء جميع التركيبات التي تحتوي على مجموعات في *S* :

: *T* := π*a*1,...,*a**n*(*R*) × *S*

في المثال السابق، سيمثل T جدولاً بحيث يجري دمج كل طالب (لأن الطالب هو المفتاح/السمة الفريدة للجدول المكتمل) مع كل مهمة معينة. على سبيل المثال، سيكون لدى Eugene صفين، Eugene → Database1 و Eugene → Database2 في T.

:: على سبيل المثال: أولاً، لنفترض أن "مكتمل Completed" لديه سمة ثالثة تسمى "الدرجة grade". فهي غير مرغوب فيها هنا، لذلك يجب علينا إسقاطها دائمًا. في الواقع، في هذه الخطوة يمكننا إسقاط "Task" من R أيضًا؛ حيث تقوم عملية الضرب بإعادتها مرة أخرى.
:: *T* := πStudent(*R*) × *S*  // هذا يعطينا كل تركيبة مرغوبة ممكنة، بما في ذلك تلك التي لا توجد بالفعل في R، واستبعاد التركيبات الأخرى (على سبيل المثال Fred | compiler1، وهي ليست تركيبة مرغوبة)

 
في الخطوة التالية نطرح *R* من *T*

العلاقة :

: *U* := *T* − *R*

في *U* لدينا التركيبات الممكنة التي "كان من الممكن" أن تكون في *R*، ولكنها لم تكن كذلك.

## الامتدادات الشائعة
في الممارسة العملية، يجري توسيع الجبر العلائقي التقليدي الموصوف أعلاه من خلال عمليات مختلفة مثل الارتباطات الخارجية والوظائف التجميعية وحتى الإغلاق المتعدي.

### الارتباطات الخارجية

#### الارتباط الخارجي الأسر

#### الارتباط الخارجي الأيمن

#### الارتباط الخارجي الكامل

### عمليات حساب المجال

## انظر أيضا
* جداء ديكارتي
* Codd's theorem
* D4 (programming language) (an implementation of D)
* نمذجة البيانات
* قاعدة بيانات
* Datalog
* تشارلز ساندرز برس
* Object-role modeling
* Projection (mathematics)
* Projection (relational algebra)
* Projection (set theory)
* Relation
* Relation (database)
* Relation algebra
* Relation composition
* Relation construction
* 
* قاعدة بيانات علائقية
* 
* لغة الاستعلامات المهيكلة
* علاقة (منطق)
* Triadic relation
* Tuple relational calculus 

## ملحوظات

## المراجع

## قراءة إضافية

*  (For relationship with cylindric algebras).

## روابط خارجية

* RAT Relational Algebra Translator Free software to convert relational algebra to SQL
* Lecture Videos: Relational Algebra Processing - An introduction to how database systems process relational algebra
* Lecture Notes: Relational Algebra – A quick tutorial to adapt SQL queries into relational algebra
* Relational – A graphic implementation of the relational algebra
* 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.
* Relational Algebra System for Oracle and Microsoft SQL Server
* Pireal – An experimental educational tool for working with Relational Algebra
* DES – An educational tool for working with Relational Algebra and other formal languages
* RelaX - Relational Algebra Calculator (open-source software available as an online service without registration)
* RA: A Relational Algebra Interpreter
* Translating SQL to Relational Algebra

تصنيف:جبر