هل يمكنك/كيف يمكنك إضافة دائرة من المراجع دون كسر RI؟

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

  •  05-07-2019
  •  | 
  •  

سؤال

أنا مهتم بشكل أساسي بـ pgsql لهذا الغرض، لكنني كنت أتساءل عما إذا كانت هناك طريقة في أي نظام إدارة قواعد بيانات RDBMS للقيام بعملية إدراج، بدون تعطيل وإعادة تمكين أي قيود FOREIGN KEY أو NOT NULL، على جدولين يشيران إلى بعضهما البعض.(قد تفكر في هذا على أنه دجاجة ولدت بطريقة ما من بيضتها).

على سبيل المثال، إذا كان لديك نظام اختبار متعدد الاختيارات، مع جدولي "سؤال" و"إجابة"، حيث يشير question.correct_answer إلى Answer.id، وanswer.question إلى question.id، فهل من الممكن إضافة سؤال وإجاباته في وقت واحد؟

(للتسجيل، أنا أدرك أنه يمكنك إجراء التعطيل وإعادة التمكين في كتلة المعاملات، وأن الحل الآخر هو عدم وجود عمود Correct_answer ولكن بدلاً من ذلك الحصول على إجابة.تصحيح كقيمة منطقية وإجراء قيد تحقق بالتأكيد هناك إجابة واحدة صحيحة لكل سؤال.لكنني لست مهتمًا بالحلول البديلة هنا.)

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

المحلول

وأعتقد أن الإجابة على السؤال الخاص بك - لديك لجعل كتلة المعاملة. في كيو وهذا ينبغي العمل:

BEGIN;
  SET CONSTRAINTS ALL DEFERRED;
INSERT INTO questions (questionid, answerid, question)
  VALUES (1, 100, 'How long are Abraham Lincoln\'s legs?');
INSERT INTO answers (answerid, questionid, answer)
  VALUES (100, 1, 'Long enough to reach the ground.');
COMMIT;

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

نصائح أخرى

سأفعل ذلك بالطريقة التالية:

  1. حدد الأسئلة.
  2. أدخل صفًا في الأسئلة، مع تعيين الإجابة الصحيحة على NULL.
  3. قم بإدراج صف (صفوف) في الإجابات، مع الإشارة إلى الصف في الأسئلة.
  4. تحديث الأسئلة تعيين recore_answer =؟

في حالة بسيطة من سؤال واحد وإجابة واحدة فإنه من المستحسن أن مجرد وضع كل الصفات في جدول واحد.

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