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

في نظرية قاعدة البيانات، الجبر العلائقي (بالإنجليزية: relational algebra)‏ هو نظرية تستخدم الهياكل الجبرية لنمذجة البيانات وتحديد الاستعلامات عليها باستخدام دلالات جيدة التأسيس. قدَّم إدغار ف كوود هذه النظرية.[1]

التطبيق الرئيسي للجبر العلائقي هو توفير أساس نظري لقواعد البيانات العلائقية، وخاصة لغات الاستعلام لمثل قواعد البيانات هذه، وأهمها لغة الاستعلامات المهيكلة 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).

الاختيار

عدل

 

 

 

 

 

(4)

الاختيار المعمم generalized selection ( σ ) هو عملية أحادية مكتوبة على النحو التالي   حيث φ هي صيغة اقتراحية propositional formula تتكون من ذرات atomsكما هو مسموح به في الاختيار الطبيعي normal selection والمؤشرات المنطقية ∧

قالب:And (and), قالب:Or- (or) and قالب:Not (negation). يقوم هذا الاختيار بتحديد كل تلك المجموعات في R التي تحتوي على φ.

للحصول على قائمة بجميع الأصدقاء أو شركاء العمل في دفتر العناوين، يمكن كتابة الاختيار على النحو التالي  . ستكون النتيجة هي علاقة تحتوي على كل سمة من سمات كل سجل فريد حيث يكون isFriend صحيحًا أو حيث يكون isBusinessContact صحيحًا.

إعادة التسمية

عدل

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

لإعادة تسمية السمة "isFriend" إلى "isBusinessContact" في علاقة،   قد ييجري استخدامها.

هناك أيضا تدوين  ، حيث يمكن إعادة تسمية R إلى x والسمات   يجري إعادة تسميتها إلى  .[2]

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

عدل

 

الارتباط الطبيعي

عدل

الارتباط الطبيعي (⨝) (بالإنجليزية Natural join) هو علاقة ثنائية تُكتب على هيئة ( RS ) حيث 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.

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

 

 

 

 

 

(1)

حيث 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 كالتالي:

 

 

 

 

 

(2)

ثم نأخذ حاصل الضرب الديكارتي ونختار المجموعات التي سيتم ضمها (ارتباطها):

 

 

 

 

 

(3)

وأخيرًا، نتخذ إسقاطًا للتخلص من السمات التي جرى إعادة تسميتها:

 

 

 

 

 

(4)

θ -join و equijoin

عدل

بالنظر إلى جداول السيارة و القارب التي تسرد قائمة نماذج من السيارات والقوارب وأسعار كل منها. لنفترض أن أحد العملاء يريد شراء سيارة وقارب، لكنه لا يريد إنفاق أموال على القارب أكثر من الإنفاق على السيارة. وبالتالي يكون θ-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

EmployeeDept
Name EmpId DeptName
Sally 2241 Sales
Harriet 2202 Production

 

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

 

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

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

 

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

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

الارتباط المضاد

عدل

الارتباط المضاد (▷) (بالإنجليزية antijoin)، يُكتب على هيئة RS حيث 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

EmployeeDept
Name EmpId DeptName
Harry 3415 Finance
George 3401 Finance

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

RS = { t : tR ∧ ¬∃sS(Fun (ts))}

أو

RS = { t : tR, there is no tuple s of S that satisfies Fun (ts)}

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

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

RS = R − RS

 

 

 

 

(5)

ونظراً لهذا، يُطلق على مضاد الارتباط 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] : tR ∧ ∀sS ( (t[a1,...,an] ∪ s) ∈ R) }

 

 

 

 

(6)

حيث { 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 := TR

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

الامتدادات الشائعة

عدل

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

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

عدل

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

عدل

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

عدل

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

عدل

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

عدل

انظر أيضا

عدل

ملحوظات

عدل
  1. ^ In الترميز الموحد, the join symbol is ⨝ (U+2A1D), and the bowtie symbol, occasionally used instead, is ⋈ (U+22C8).
  2. ^ In الترميز الموحد, the ltimes symbol is ⋉ (U+22C9). The rtimes symbol is ⋊ (U+22CA)
  3. ^ In الترميز الموحد, the Antijoin symbol is ▷ (U+25B7).

المراجع

عدل
  1. ^ ا ب Codd، E.F. (1970). "A Relational Model of Data for Large Shared Data Banks". Communications of the ACM. ج. 13 ع. 6: 377–387. DOI:10.1145/362384.362685. S2CID:207549016.
  2. ^ Silberschatz، Abraham؛ Henry F. Korth؛ S. Sudarshan (2020). Database system concepts (ط. Seventh). New York. ص. 56. ISBN:978-0-07-802215-9. OCLC:1080554130.{{استشهاد بكتاب}}: صيانة الاستشهاد: مكان بدون ناشر (link)
  3. ^ M. Tamer Özsu؛ Patrick Valduriez (2011). Principles of Distributed Database Systems (ط. 3rd). Springer. ص. 46. ISBN:978-1-4419-8833-1. مؤرشف من الأصل في 2017-02-11.

قراءة إضافية

عدل

روابط خارجية

عدل