إدخال قيد المفتاح الخارجي 'c_name على الجدول 't_name' قد يسبب دورات متعددة أو سلسلة مسارات

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

سؤال

لدي جدول قاعدة بيانات تسمى Lesson:
الأعمدة: [LessonID, LessonNumber, Description] ...بالإضافة إلى بعض الأعمدة الأخرى

لدي جدول آخر يسمى Lesson_ScoreBasedSelection:
الأعمدة: [LessonID,NextLessonID_1,NextLessonID_2,NextLessonID_3]

عندما درس الانتهاء ، LessonID هو بدا في Lesson_ScoreBasedSelection الجدول للحصول على ثلاثة الدروس القادمة ، كل منها ترتبط مع مجموعة معينة من النقاط.إذا كانت النتيجة 0-33 ، LessonID المخزنة في NextLessonID_1 ستستخدم.إذا كانت النتيجة 34-66 ، LessonID المخزنة في NextLessonID_2 ستستخدم وهلم جرا.

أريد أن تقيد جميع الأعمدة في Lesson_ScoreBasedSelection الجدول مع مفاتيح خارجية الرجوع LessonID عمود في الدرس الجدول ، لأن كل قيمة في Lesson_ScoreBasedSelection الجدول يجب أن يكون الدخول في LessonID عمود من الدرس الجدول.أنا أيضا أريد تتالي التحديثات تشغيل ، بحيث إذا LessonID التغييرات في الدرس الجدول كافة المراجع إلى أنه في Lesson_ScoreBasedSelection الجدول الحصول على تحديث.

هذا خاص تتالي تحديث تبدو واضحة جدا ، واحدة-طريقة التحديث ولكن عند محاولة تطبيق قيد المفتاح الخارجي إلى كل حقل في Lesson_ScoreBasedSelection الجدول الرجوع LessonID الميدانية في الدرس الجدول ، أحصل على الخطأ:

إدخال قيد المفتاح الخارجي 'c_name على الجدول 'Lesson_ScoreBasedSelection'قد تتسبب في دورات متعددة أو سلسلة مسارات.

يمكن لأي شخص أن يشرح لماذا أنا على الحصول على هذا الخطأ أو كيف يمكن تحقيق القيود المتتالية تحديث وصفت?

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

المحلول

نظرا SQL Server قيود على هذا, لماذا لا يمكنك حل هذه المشكلة عن طريق إنشاء جدول مع SelectionID (PK) ، LessonID, Next_LessonID, QualifyingScore كما الأعمدة.استخدام القيد لضمان LessonID و QualifyingScore هي فريدة من نوعها.

في QualifyingScore العمود ، أود أن استخدام tinyint ، وجعلها 0 أو 1 أو 2.أن ، أو هل يمكن أن تفعل QualifyingMinScore و QualifyingMaxScore العمود لذلك يمكن أن أقول ،

SELECT * FROM NextLesson 
WHERE LessonID = @MyLesson 
AND QualifyingMinScore <= @MyScore 
AND @MyScore <= QualifyingMaxScore

الهتافات ،
اريك

نصائح أخرى

لا يمكن أن يكون أكثر من واحد المتتالية ري رابط جدول واحد في أي جدول مرتبط. مايكروسوفت يوضح هذا:

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

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