Ahmed Khayal بتاريخ: 3 أبريل 2016 تقديم بلاغ مشاركة بتاريخ: 3 أبريل 2016 من المعروف ان من عيوب Sequence انه عند اضافة حقل جديد يأخذ الحقل رقمه القادم من Sequence وعند حذفه لأي سبب لا يعود كما كان ولكن ما بعده يأخذ رقم تالي له بالرغم من عدم وجوده أي نفترض ان رقم الحقل 1 ثم تم اضافة حقل فأصبح 2 ثم تم حذفه واضافه مره اخرى نجد انه يأخذ الرقم 3فأصبح الموجود في الجدول 1 ثم 3وهي مشكله معروفه اعتقد انه يتم برمجيا بعيدا عن Sequence بالبحث داخل الحقل واختيار الاكبر واضافه 1 ثم وضعه في الجدول ام إذا وجد Master Detail أي انه إذا اخذ حقل رقم الفاتورة مثلا في Master وأردت ان يأخذه في Detail لإضافة العناصر الخاصة به فكيف يتم برمجيا ام عن سؤالي فما هو بديل Sequence اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
kherooooo بتاريخ: 3 أبريل 2016 تقديم بلاغ مشاركة بتاريخ: 3 أبريل 2016 يمكنك عمل حقل اضافي فيه التسلسل الذي تريده برمجيا ، أما المفتاح الرئيسي (Primary Key) فيفضل أن تستخدم معه Sequence خاصة في بيئة الويب. 2 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Ahmed Khayal بتاريخ: 3 أبريل 2016 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 3 أبريل 2016 (معدل) انت كدا هتجبرنى استخدم الربط بحقل Sequence ودا هيبقى غير رقم الفاتوره لان مش هينفع يكون عندى رقم فاتوره مش موجود اساساطيب هل دا اللى بيستخدم فى البرامج فعلا ؟ ولا فى حلول اخرى ؟ولنفترض انى مش عايز اعمل حقلين يكون عندى حقل واحد لرقم الفاتوره ويكون مفتاح رئيسىوفى نفس الوقت لايوجد به مشكله Sequence تم تعديل 3 أبريل 2016 بواسطة Ahmed Khayal اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
kherooooo بتاريخ: 3 أبريل 2016 تقديم بلاغ مشاركة بتاريخ: 3 أبريل 2016 ممكن تستخدم رقم الفاتورة كمفتاح لكنه ليس التصميم الأفضل ، لأنه قد يسبب مشاكل في الإدخال في حالة أكثر من عملية في نفس الوقت. 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Ahmed Khayal بتاريخ: 3 أبريل 2016 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 3 أبريل 2016 تمام شكرا يابشمهندس احمد اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
kherooooo بتاريخ: 3 أبريل 2016 تقديم بلاغ مشاركة بتاريخ: 3 أبريل 2016 تمام شكرا يابشمهندس احمد عفوا 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
orcl بتاريخ: 3 أبريل 2016 تقديم بلاغ مشاركة بتاريخ: 3 أبريل 2016 (معدل) السلام عليكم و رحمة الله و بركاته بامكانك استخدام Sequence و ادخل قيمة الحقل عند لحظة الاضافة و ذلك من خلال استخدام doDML على مستوي ال EO protected void doDML(int operation, TransactionEvent e) { if (operation == DML_INSERT) { و بذلك تتاكد بانك استخدمت ال Sequence وقت اضافة السجل الى قاعدة البيانات ربما يفيدك الرابط التالي http://andrejusb.blogspot.com/2013/01/how-to-implement-gapless-sequence-in.html بالتوفيق تم تعديل 3 أبريل 2016 بواسطة orcl 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Ahmed Khayal بتاريخ: 4 أبريل 2016 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 4 أبريل 2016 تمام يابشمهندس orcl هجربها واشوف المثال فى الرابطشكرا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
sd4it بتاريخ: 4 أبريل 2016 تقديم بلاغ مشاركة بتاريخ: 4 أبريل 2016 من المعروف ان من عيوب Sequence انه عند اضافة حقل جديد يأخذ الحقل رقمه القادم من Sequence وعند حذفه لأي سبب لا يعود كما كان ولكن ما بعده يأخذ رقم تالي له بالرغم من عدم وجوده أي نفترض ان رقم الحقل 1 ثم تم اضافة حقل فأصبح 2 ثم تم حذفه واضافه مره اخرى نجد انه يأخذ الرقم 3 فأصبح الموجود في الجدول 1 ثم 3 وهي مشكله معروفه اعتقد انه يتم برمجيا بعيدا عن Sequence بالبحث داخل الحقل واختيار الاكبر واضافه 1 ثم وضعه في الجدول ام إذا وجد Master Detail أي انه إذا اخذ حقل رقم الفاتورة مثلا في Master وأردت ان يأخذه في Detail لإضافة العناصر الخاصة به فكيف يتم برمجيا ام عن سؤالي فما هو بديل Sequence بداية صيغة السؤال خادعة ولا توحي بالمطلوب السؤال الحقيقي هو "كيف يمكن ضمان عدم وجود قيم خالية غير مستخدمة في حالة Sequence؟ هل يوجد بديل أفضل؟" 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
sd4it بتاريخ: 4 أبريل 2016 تقديم بلاغ مشاركة بتاريخ: 4 أبريل 2016 يمكنك عمل حقل اضافي فيه التسلسل الذي تريده برمجيا ، أما المفتاح الرئيسي (Primary Key) فيفضل أن تستخدم معه Sequence خاصة في بيئة الويب. أتفق 100% 2 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
sd4it بتاريخ: 4 أبريل 2016 تقديم بلاغ مشاركة بتاريخ: 4 أبريل 2016 انت كدا هتجبرنى استخدم الربط بحقل Sequence ودا هيبقى غير رقم الفاتوره لان مش هينفع يكون عندى رقم فاتوره مش موجود اساسا طيب هل دا اللى بيستخدم فى البرامج فعلا ؟ ولا فى حلول اخرى ؟ ولنفترض انى مش عايز اعمل حقلين يكون عندى حقل واحد لرقم الفاتوره ويكون مفتاح رئيسى وفى نفس الوقت لايوجد به مشكله Sequence يمكن أن يكون هناك حقلان ولا مشكلة في هذا 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
sd4it بتاريخ: 4 أبريل 2016 تقديم بلاغ مشاركة بتاريخ: 4 أبريل 2016 ممكن تستخدم رقم الفاتورة كمفتاح لكنه ليس التصميم الأفضل ، لأنه قد يسبب مشاكل في الإدخال في حالة أكثر من عملية في نفس الوقت. ليست المشكلة مشكلة إدخال أكثر من عملية المشكلة أن رقم الفاتورة قد يتكرر يحدث هذا عندما يريد العميل إنشاء ترقيم مختلف للفواتير في فروع محتلفة وبالتالي يمكن تكرار رقم الفاتورة هنا 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
sd4it بتاريخ: 4 أبريل 2016 تقديم بلاغ مشاركة بتاريخ: 4 أبريل 2016 السلام عليكم و رحمة الله و بركاته بامكانك استخدام Sequence و ادخل قيمة الحقل عند لحظة الاضافة و ذلك من خلال استخدام doDML على مستوي ال EO protected void doDML(int operation, TransactionEvent e) { if (operation == DML_INSERT) { و بذلك تتاكد بانك استخدمت ال Sequence وقت اضافة السجل الى قاعدة البيانات ربما يفيدك الرابط التالي http://andrejusb.blogspot.com/2013/01/how-to-implement-gapless-sequence-in.html بالتوفيق هذا لا يضمن عدم وجود قيم خالية لأنه ببساطة لو كان هناك خطأ في الإدخال نفسه أو Exception فستضيع قيمة sequence كما أنه لو قام شخص أخر بكتابة select seq_name.nextval from dual من قاعدة البيانات فستضيع القيمة 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
sd4it بتاريخ: 4 أبريل 2016 تقديم بلاغ مشاركة بتاريخ: 4 أبريل 2016 بشكل عام سأتناول طريقة المعالجة بشكل أدق في وقت لاحق بإذن الله 2 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Ahmed Khayal بتاريخ: 5 أبريل 2016 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 5 أبريل 2016 بشكل عام سأتناول طريقة المعالجة بشكل أدق في وقت لاحق بإذن الله عذرا ياستاذنا على صيغة السؤال ولكن ماشغلنى اكثر هو المضمون وتوضيح الفكره بالداخل فحتى انى ذكرت امثله فى السؤال للتوضيح اكثر واعتقدت ان الحل سيكون برمجيا بحتا بعيدا عن قاعدة البيانات واتمنى ان تتناول المشكله بشكل ادق واضح ليكون مرجع لكل المبرمجين الجدد عندما تقابلهم نفس المشكله شكرا ياستاذنا اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
sd4it بتاريخ: 5 أبريل 2016 تقديم بلاغ مشاركة بتاريخ: 5 أبريل 2016 بشكل عام سأتناول طريقة المعالجة بشكل أدق في وقت لاحق بإذن الله عذرا ياستاذنا على صيغة السؤال ولكن ماشغلنى اكثر هو المضمون وتوضيح الفكره بالداخل فحتى انى ذكرت امثله فى السؤال للتوضيح اكثر واعتقدت ان الحل سيكون برمجيا بحتا بعيدا عن قاعدة البيانات واتمنى ان تتناول المشكله بشكل ادق واضح ليكون مرجع لكل المبرمجين الجدد عندما تقابلهم نفس المشكله شكرا ياستاذنا إن شاء الله أوضحها 2 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
sd4it بتاريخ: 6 أبريل 2016 تقديم بلاغ مشاركة بتاريخ: 6 أبريل 2016 بداية دعونا نفهم أصل المشكلة توجد بعض البيانات المطلوب إنشاء رقم تسلسلي فيها دون أن يحدث فقد لأي رقم على الإطلاق والأسباب في ذلك كثيرة يعني مثلاً رقم الفاتورة يجب أن يكون رقماً مسلسلاً بحيث أنه لو وجدت فاتورة رقمها 1000 فهذا يعني وجود 1000 فاتورة لا يسمح العميل أن يكون هناك رقم مفقود في الوسط لأي سبب هنا يحتاج إلى حل برمجي لهذا أيضاً أرقام المعاملات لا يسمح بالأرقام التي تضيع وبالمثل الكثير من البيانات التي لا تسمح بوجود أرقام مفقودة هذه هي أصل المشكلة 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
sd4it بتاريخ: 7 أبريل 2016 تقديم بلاغ مشاركة بتاريخ: 7 أبريل 2016 إذن لدينا متطلب واضح من العميل يجب أن يتم تعبئة رقم مسلسل لا يسمح بأي فراغ لا يمكن أن يتراجع المستخدم عن العملية فيجد أن الرقم ضاع هنا يكون على المبرمج التفكير في الحلول البرمجية المناسبة لحل هذه المشكلة نتعرف على الحلول المختلفة لهذه الجزئية 2 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
sd4it بتاريخ: 8 أبريل 2016 تقديم بلاغ مشاركة بتاريخ: 8 أبريل 2016 قد يفكر الشخص في استخدام Sequence حيث أن استخدامه الأساسي بالفعل هو رقم مسلسل يذهب المبرمج إلى دالة create ويضع الكود فيها المشكلة التي تحدث هنا هو أنه إذا قام المستخدم بإنشاء جديد ثم تراجع أو أغلق الجهاز أو حدثت مشكلة في النظام أو في الاتصال هنا تحدث المشكلة القيمة التي يتم الحصول عليها من Sequence لا يمكن الحصول عليها مرة أخرى العداد لا يتوقف أبداً إذن هذا الحل غير مناسب 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
sd4it بتاريخ: 10 أبريل 2016 تقديم بلاغ مشاركة بتاريخ: 10 أبريل 2016 من الممكن إجراء تحسين هنا عن طريق تحويل الكود إلى الدالة doDML بدلاً من create لا تزال هناك مشكلة أنه لو حدث خطأ في الإدخال نفسه فسيضيع الرقم كما أنه لو قام أحد الأشخاص بكتابة جملة select seq.nextval from dual فسيضيع الرقم أيضاً إذن هذا الحل ليس مناسباً أيضاً 2 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
sd4it بتاريخ: 10 أبريل 2016 تقديم بلاغ مشاركة بتاريخ: 10 أبريل 2016 حسناً قد نفكر أن نقوم بعمل sequence برمجياً يعني مثلاً نقوم بإنشاء جدول خارجي ونضع فيه الرقم الحالي بحيث أنه يتم جلب القيمة من الجدول وزيادتها بعد التأكد من الإدخال حسناً لنحلل هذا الحل 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
sd4it بتاريخ: 11 أبريل 2016 تقديم بلاغ مشاركة بتاريخ: 11 أبريل 2016 يكون لدينا الخيارين أيضاً إما أن نضع الكود داخل create أو داخل doDML في حالة create فهذا يسبب مشكلة كبرة في حالة وجود أكثر من مستخدم متزامن تخيل أنه يوجد 10 كاشيرات مثلاً في نفس الوقت أكيد وارد إدخال أكثر من فاتورة في نفس الوقت إذن هذا الحل لا يصلح في حالة المستخدمين المتزامنين 2 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
sd4it بتاريخ: 11 أبريل 2016 تقديم بلاغ مشاركة بتاريخ: 11 أبريل 2016 يذهب التفكير تلقائياً لكتابة الكود داخل doDML لكن للأسف مع وجود مستخدمين متزامنين فلا تزال توجد مشكلة البعض يقوم بعمل Lock على الجدول لمنع أي عملية من مستخدم أخر في نفس الوقت مشكلتها أنه لو حدثت مشكلة في النظام فسيظل هناك lock على الجدول ويجب تدخل DBA لفك الـ Lock وبالتالي هذا ليس حلاً عملياً 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
sd4it بتاريخ: 13 أبريل 2016 تقديم بلاغ مشاركة بتاريخ: 13 أبريل 2016 قد يفكر البعض في استخدام next max عن طريق جملة sql ونفس الخيارين موجودين معنا إما أن نكتب في create وإما في doDML حسناً لنحلل هذين الحلين 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
sd4it بتاريخ: 14 أبريل 2016 تقديم بلاغ مشاركة بتاريخ: 14 أبريل 2016 إذا وضعنا الكود في create فسيكون الوضع أسوأ من استخدام sequence لأنه في حالة وجود أكثر من مستخدم متزامن فسيحصل الكل على نفس النتيجة إذن هذا ليس مناسباً بالمرة 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.