كيف يمكنني إعادة تسمية القيم الرئيسية الأولية في أوراكل؟

StackOverflow https://stackoverflow.com/questions/1849184

سؤال

يستخدم تطبيقنا قاعدة بيانات Oracle 10G حيث تتعرض عدة مفاتيح أساسية للمستخدم النهائي. منتجات المنتجات ومثل هذه. لسوء الحظ، من المستغرق في وقت متأخر من فعل أي شيء بهذا، حيث توجد أطنان من التقارير والبرامج النصية المخصصة التي لا يكون لدينا سيطرة عليها. لا يمكننا إعادة تعريف المفاتيح الأساسية أو الفوضى بنية قاعدة البيانات.

الآن يريد بعض العملاء تغيير بعض القيم الرئيسية الأساسية. ما أرادوه في البداية الاتصال P23A1 يجب أن يسمى الآن CAT23MOD1 (وليس مثال حقيقي، لكنك تحصل على معناي.)

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

هل كانت مفيدة؟

المحلول

من المفترض أن المشكلة مع المفاتيح الأجنبية التي تشير إلى PK. يجب عليك تحديد المفاتيح الأجنبية ك "تأجيل فوري في البداية"، كما هو موضح في مقالة توم كيست: http://www.oracle.com/technology/oramag/oracle/03-nov/o63asktom.html.التي تتيح لك ...

  1. تأجيل القيود
  2. تعديل القيمة الأصل
  3. تعديل قيم الطفل
  4. ارتكب التغيير

بسيط.

نصائح أخرى

أووبس. يجعل Googling القليل من ذلك، لا ينفذ Oracle بشكل غير مفهوم على Cascade Update، فقط على حذف Cascade. للعثور على حلول Google Oracle على Cascade Update. إليك رابط إنشاء مجموعة التحديث المتوسطة من الجداول في أوراكل.

الإجابة الأصلية:

إذا فهمت بشكل صحيح، فأنت تريد تغيير القيم البيانات في الأعمدة الرئيسية الأساسية، وليس أسماء القيود الفعلية للمفاتيح نفسها.

إذا كان هذا صحيحا، فمن الأفضل أن يتم إنجازه بسهولة إعادة تعريف جميع المفاتيح الأجنبية التي تشير إلى قيود المفتاح الأساسي المتأثر ON UPDATE CASCADE. وبعد هذا يعني أنه عند إجراء تغيير في القيمة الرئيسية الأساسية، سيقوم المحرك بتحديث جميع القيم ذات الصلة تلقائيا في جداول المفاتيح الأجنبية.

كن على علم بأنه إذا كان هذا يؤدي إلى الكثير من التغييرات يمكن أن يكون باهظ الثمن في نظام الإنتاج.

إذا كان عليك القيام بذلك على نظام مباشر بدون تغييرات DDL إلى الجداول المعنية، فما أعتقد أن الخيار الوحيد الخاص بك هو (لكل قيمة من PK التي يجب تغييرها):

  1. إدراج في الجدول الأصل نسخة من الصف مع استبدال قيمة PK
  2. لكل طاولة طفل، قم بتحديث قيمة FK إلى قيمة PK الجديدة
  3. حذف صف الجدول الأصل مع قيمة PK القديمة

إذا كان لديك قائمة من الجداول الأصل وقيم PK لإعادة تسميةها، فلا ينبغي أن يكون من الصعب جدا كتابة إجراء يقوم بذلك - يمكن استخدام المعلومات الموجودة في user_constraints للحصول على جداول FK ذات الصلة بجدول أصل معين وبعد

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top