خالد مرتضى نشر 31 أغسطس 2021 أرسل تقرير نشر 31 أغسطس 2021 لماذا دائما تكون الكويريز المستخدمة لجلب بيانات مستخدم معين تتم بواسطة الprimary key ع الرغم من سهولة استخدام الحقول الاخرى اللتى لها معنى مثل الاسم والاميل 2 اقتباس
2 محمد أبو عواد نشر 31 أغسطس 2021 أرسل تقرير نشر 31 أغسطس 2021 السبب بسيط وهو أنه لا يمكن للمفتاح الرئيسي أو ما يعرف بprimary key أن يتكرر وهو حقل فريد أي لا يمكن ان تتكرر قيمته, بمعنى آخر لن تجد مستخدمين لهما نفس قيمة primary key, بينما من الممكن ان يتم تكرار الاسم, فمثلا من الممكن أن يكون المستخدم الأول اسمه محمد, والثاني أيضا اسمه محمد, تخيل لو اعتمدنا على الاسم في هذه الحالة, البيانات المسترجعة لأي مستخدم سوف تكون؟ لذلك دائما نعتمد على حقل نكون متأكدين ان قيمته لن تتكرر لكي نسترجع البيانات بشكل صحيح, يمكنك الاعتماد على الايميل أو اسم المتسخدم او أي حقل تكون متأكد انه لن يتكرر , لا مشكلة في ذلك بالتأكيد, الفكرة ليس دائما في استخدام primary key , بل أن نقوم بالاستعلام باستخدام حقل لن تتكرر قيمته بين البيانات اقتباس
1 شرف الدين حفني نشر 31 أغسطس 2021 أرسل تقرير نشر 31 أغسطس 2021 هذا لأن قاعدة البيانات عند بحثها عن حقول من الindex يكون الأمر مختلفًا عن بحثها عن حقول عادية, والprimary key و الunique يعدون من الindexes ولكن كيف يختلف البحث ؟ عندما تقوم بتخزين تسجيل ما فإن قاعدة البيانات تضع قيمة الindex الخاص بهذا التسجيل بداخل هيكل بيانات من نوع الhash table (ليس جميع قواعد البيانات يستخدمون نفس نوع هيكل البيانات فبعضهم يستخدم الbinary tree ولكن حتى تفهم جيدا فلنتعامل مع الHash table) والhash table هو عبارة عن مصفوفة ولكن بدلا من الوصول إلى العنصر بإستخدام ترتيبه نعصر عليه بإستخدام الkey فمثلا hash_table[ "sharaf":"ashraf", "mahmoud":"hossam" ] الhash table هذا يخزن مفتاح sharaf ويحمل قيمة ashraf كيف يتم هذا التخزين؟ يتم إجراء عملية hashing للمفتاح ويتم وضع القيمة المرتبطة بالمفتاح في الذاكرة عند العنوان الناتج من عملية الhashing التي تتم للمفتاح, فإذا ان كان لدينا قيمة اي مفتاح في الجدول نستطيع أن نصل إلى قيمته لحظيًا بدون إجراء بحث لأننا بالفعل نمتلك عنوانه في الذاكرة (قيمة الhashing لهذا المفتاح) بالتالي عندما تقوم بتخزين سجل ما في قاعدة البيانات يتم بيانات هذا السجل كقيمة للمفتاح المسمى على إسم الindex فبالتالي عندمة تقوم بالبحث عن سجل بإستخدام الindex تحصل على السجل لحظيًا, على عكس باقي الحقول التي تعطيك قيمة السجل بعد إجراء عملية بحث على جميع السجلات في الجدول اقتباس
1 Hassan Hedr نشر 31 أغسطس 2021 أرسل تقرير نشر 31 أغسطس 2021 نعم يمكنك الاستعلام عن البيانات عن طريق أي حقل أو مجموعة من الحقول الأخرى التي تريدها دون الحاجة لوجود مفتاح أساسي، لكن قد تواجهك المشاكل التالية: التأكد أن توليفة الحقول التي ستستعلم بها مميزة لكل عنصر داخل الجدول (يمكن للخاصية Unique أن تساعدك على ضمان ذلك) مع الوقت قد يطرأ تغيير على قيمة الحقل، الحقول التي ستختارها سيتم الاشارة اليها في جداول اخرى للربط بين العناصر ويجب عندها المرور على كل ذكر للقيمة في الجداول الأخرى والتأكد من تغييرها للقيمة الجديدة اذا اخترت حقل اسم المستخدم مع الوقت قد تدخل ميزة حذف حساب مستخدم مع ابقاء بياناته ضمن قاعدة البيانات (مثلا باضافة حقل is_deleted)، ما يعني السماح للمستخدمين الجدد باستعمال اسم مستخدم محذوف، ولكن لن يتم السماح بتكرار اسم مستخدم جديد يماثل اسم مستخدم موجود سابقا (ولو كان محذوف بالنسبة لتطبيقك) التأكد من فهرسة الحقول المميزة التي اخترتها لزيادة سرعة جلب البيانات للتخلص من كل هذه المشاكل نضيف مفتاح رئيسي عبارة عن حقل إضافي بدون معنى، مهمته فقط تمييز كل عنصر داخل الجدول بطريقة مجردة لا تتغير مهما تغيرت ميزات تطبيقك نسميه primary key عبارة عن عدد متزايد (أو أي قيم عشوائية مميزة أخرى) اقتباس
0 Adnane Kadri نشر 31 أغسطس 2021 أرسل تقرير نشر 31 أغسطس 2021 بجانب ما قام المدربان شرف و أبو عواد بشرحه , فإنه يتم الإعتماد عليها في الإستعلامات أيضا لأن استخدام المفاتيح الرئيسية شائع أيضا كطريقة لتقييد أو ربط البيانات ذات الصلة ببعضها في قاعدة بيانات . و هذا يضمن أن تظل البيانات متسقة وأن قاعدة البيانات لا تحتوي على أية بيانات زائدة عن الحاجة . على سبيل المثال ، إذا قمت بحذف جدول (أو حتى صف في جدول) تعتمد عليه الجداول الأخرى ، فستتم إزالة البيانات المكررة . و يساعد هذا في منع مشاكل تكامل البيانات التي يمكن أن تسبب مشاكل مع التطبيقات التي تستخدم مثل هذه البيانات . و يعني هذا أنه بجانب أن المفاتيح الرئيسية سهلة في الإستعلام و فريدة و غير مكررة هي ضرورية جدا أيضا إذا كان الجدول مؤهلاً كجدول علائقي , أي أن يكون جدول يرتبط بغيره من الجداول بعلاقة ما . أي أنه له دورا علائقيا أيضا . كما أن هناك مشكلة أخرى تتعلق باستخدام السلاسل النصية مثلا كمفتاح أساسي وهي : نظرًا لأنه يتم وضع الفهرس في ترتيب تسلسلي باستمرار ، فإنه عند إنشاء مفتاح جديد يكون في منتصف الترتيب ، يتطلب علينا إعادة ترتيب الفهرس ... لكن إستخدامنا لمفتاح رئيسي يكون تلقائيا كعدد صحيح مرتب يجعلنا نضيف المفتاح الجديد فقط إلى نهاية الفهرس دون أي تداخل . أي أنه له بجانب دوره التبسيطي , و العلائقي دورا ترتيبيا و منطقيا أيضا . و لنأخذ على سبيل المثال , تطبيقات السجلات . فمن غير المنطقي طبعا أن يتغير ترتيب السجل كل مرة يتم فيها إدخال حقل جديد . فكل هذا يؤول إستخدام المفاتيح الرئيسية في أغلب الإستعلامات . و طبعا كل هذا لا يعني هذا الإستغناء عن باقي الأعمدة و الإكتفاء بالإستعلام عن البيانات بمفتاح رئيسي , فقد نحتاج في كثير من الحالات الإستعلام عن البيانات عن طريق أعمدة أخرى من مثل الإستعلامات التي يتم كتابتها في عمليات البحث و الفهرسة . اقتباس
السؤال
خالد مرتضى
لماذا دائما تكون الكويريز المستخدمة لجلب بيانات مستخدم معين تتم بواسطة الprimary key ع الرغم من سهولة استخدام الحقول الاخرى اللتى لها معنى مثل الاسم والاميل
4 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.