EasyDelphi Q&A
0 تصويتات
35 مشاهدات

أولا أود التقدم بالشكر الخاص للأستاذ سامر حول توضيحه للحلقة المفقودة حول كيفية التعامل مع المفتاح الرئيسي للجداول ....

تلخيص الفكرة التي طرحها الأستاذ سامر :

  •  المفتاح الأساسي للجدول لا يجب أن يحمل  معنى و لا يعبر عن أي شيئ له معنى مثل ( رقم فاتورة ) ( رقم زبون ) ( رقم مستند ) ... لا نضع له معنى في المقابل يمكننا عمل حقل اضافي لهذه الاشياء وندعه يعبر عن ما نشاء مثل رقم الطالب أو رقم الفاتورة و غيره ...  المهم لا تقحم المفتاح الاساسي في هذه الأشياء .
  • لا يجب  العبث بالمفتاح الرئيسي للجدول كأن نحاول مثلا معالجة الترتيب الناقص ضمن التسلسل بسبب حذف مفاتيح من قبل في وسط الجدول  بإختصار لا يهم التسلسل المطلق (بمعنى 1,2,3,4,5,6,7,8,9) ما دامت المفاتيح في الجدول مرتبة بخاصية AutInc (بمعنى قد نجد التسلسل كالتالي :  1,2,3,5,7,9 و هذا عادي جدا لأننا قمنا بالحذف مسبقا لكل من المفاتيح 4,6,8 فلا يهم مطلقا هذا النقصان في القيم و لا نعرها أي إهتمام مطلقا و إلا سنقع في مشاكل لا حصر لها مستقبلا). في المقابل يمكننا عمل حقل اضافي لهذا و نعالج بعدها حالة التسلسل المطلق عليه إن توجب علينا ذلك....

في الأخير هناك سؤالين أود طرحهما للأستاذ سامر:

السؤال الأول  :

حاليا لابد من مفتاح الجدول أن يحمل خاصية  AutoInc حتى نضمن 100بالمائة عدم تكراره في الجدول. و لكن هل لهذه الخاصية عيوب هي الأخرى في المستقبل ؟ أنا لا أتكلم عن قاعدة المعطيات Access فهي حالة خاصة .... و لكن هل في القواعد الأخرى قد تخلق لنا هذه الخاصية مشاكل ؟

السؤال الثاني:

إذا ما لم نستعمل خاصية AutoInc لأي سبب من الأسباب هل يجب أيضا عدم مراعات التسلسل في قيم الحقل مفتاح و ضمان عدم تكراره عند محاولة الإضافة مثلا ؟ هل إدراج قيمة "nil" لهذا النوع من الحقل عند محاولة الإضافة تحل المشكلة ؟ أم هناك أمور أخرى لابد من ضبطها في قاعدة المعطيات حتى نضمن عدم التكرار ؟

و شكرا. 

ملاحظة: يمكن للجميع الإجابة أو التعليق حتى يستفيد الجميع .

سُئل في تصنيف SQL Server بواسطة (19,960 نقاط) | 35 مشاهدات

1 إجابة واحدة

+3 تصويتات
  1. هل لـ AutoInc عيوب مستقبلية ؟ 
    • ليس لكل قواعد البيانات AutoInc. مثل الـ interbase و Firebird . هي تستخدم طريقة اخرى وهي Sequance خارج الجدول .
    • لا يوجد عيوب في الـ AutoInc . إلا حالة واحدة وهي ان يكون حجم الحق الذي اخترته صغير ولديك سجلات كثيرة جدا بحيث لا يتسع الحقل للقيمة الجديدة . لهذا عادة المبرمجين يستخدمون نوع integer لحقل المفتاح . لانه يصل حتى 2,147,483,647  وهو رقم كبير جدا . بالمقارنة مع النوع الاصغر مباشرة SmallInt الذي اقصى حد له هو 32,767 . نضعه integer ولا نشغل بالنا في الحجم لانه كبيرة جدا جدا . غير هذا لا توجد مشاكل مستقبلية ابدا .
  2. هذا سؤال مركب :
    • اذا لم تستخدم AutoInc لحقل المفتاح . هل يجب عدم مراعات التسلسل ومراعاة عدم التكرار ؟
      • هل يجب مراعاة التسلسل ؟؟؟ ليس بالضرورة . التسلسل ليس شرطا في حقل المفتاح الاساسي . بينما عدم التكرار هو شرط اساسي . فلا يهم التسلسل ابدا . لكن بما ان حقل المفتاح هو index . فالحقل المسلسل سيساعد على تسريع فهرسة السجلات وخاصة ان كان التسلسل رقمي  . بمعنى هي ميزة مخفية اضافية تحصل عليها في حال استخدام تسلسل . بغض النظر عن التسلسل بـ AutoInc ام بتسلسل تصنعه انت .  باختصار الـ AutoInc تضعها وتنسى كل هذه التفاصيل فهي ميزات مكتسبة بدون جهد .
    • هل ادراج قيمة nil كقيمة لحقل المفتاح عند اضافة سجل جيد تكفي ؟ 
      • nil هي ليست قيمة هي بوينتر . الصحيح هو استخدام null . ( اعتقد ان هذا الخطأ سقط سهوا منك . لكني تعمدت التنويه . لاني وجدتها مهمة لمن يتابع السؤال من اعضاء الموقع . ) .
      • الإجابة . هذا يختلف من قاعدة بينات لأخرى . بعضها انت مضطر لوضع قيمة null لاخبار محرك قاعدة البيانات بان يستخدم القيمة الجديدة من AutoInc . وبعضها قواعد البيانات لا يحتاج فيكفي تجاهل وجود الحقل تماما . وبعضها الاخر انت مضطر لنقل قيمته من عداد خارجي squance وعادة يتم بالـ triggers على مستوى قاعدة البيانات وليس التطبيق . مثل interbase و Firebird . بالمناسبة الـ sequance قد يبدو بظاهره ضعيف وان الـ AutoInc افضل . لكن الحقيقة انا اجد الـ Sequance اكثر مرونة من الـ AutoInc رغم الحاجة لعمل اضافي. مثل حالة اتخاذ قرار ان كنت بحاجة لاستخدام العداد في عدة اماكن او اتخذا قرار معين قبل استخدامه . 
    • أم هل هناك امور يجب ضبطها لضمان عدم التكرار ؟ 
      • لا تحتاج لضبط شيء . عدم التكرار هي صفة من صفات المفتاح الاساسي . اي بمعنى بمجرد تحديد حقل ليكون مفتاح اساسي سيأخذ هذه الصفة unique وسيرفض التكرار شئت ام ابيت . ليس مثل الـ AutoInc انت حر تستخدمها ام لا . 
تم الرد عليه بواسطة (28,680 نقاط)

اسئلة متعلقة

+5 تصويتات
2 إجابة
سُئل أغسطس 19، 2018 في تصنيف SQL Server بواسطة Yamada Fakir (1,690 نقاط) | 128 مشاهدات
0 تصويتات
2 إجابة
+4 تصويتات
2 إجابة
ادعُ اصدقائك في الفايسبوك لمشاركتك
Comodo SSL

مرحبًا بك إلى EasyDelphi Q&A، حيث يمكنك طرح الأسئلة والحصول على الإجابة عليها من المستخدمين الآخرين.

لا يسمح بطلب او السؤال عن كراك او تفعيل او كسر او فك او اي شيء يخالف اتفاقيات الترخيص  مهما كان السبب ومهما كان البرنامج ونوعه. ولا حتى نشر روابط تحتوي على مثل هذه الاشياء لا في الاسئلة ولا في الاجابات ولا التعليقات . نهائيا

441 سؤال
675 إجابة
1,216 تعليق
258 مستخدم