سؤال

لدي جدول, قسم , مع العديد من بت المجالات للإشارة إلى قسم أنواع واحد هو مستودع (عندما صحيحا ، إلى إدارة المستودعات)

ولدي جدول آخر ، ManagersForWarehouses مع البنية التالية:

ID autoinc
WarehouseID int (foreign key reference DepartmentID from departments)
ManagerID int (foreign key reference EmployeeID from employees)
StartDate
EndDate

تعيين المدير الجديد للمستودع ، أنا أدخل في هذا الجدول مع EndDate null, و لدي الزناد أن مجموعات EndDate عن الرقم القياسي السابق الذي مستودع = StartDate عن المدير الجديد حتى واحد مدير يظهر مستودع في وقت معين.

أريد أن إضافة اثنين من قيود التحقق على النحو التالي ، ولكن لم تكن متأكدا من كيفية القيام بذلك

  1. لا تسمح أن تضاف إلى ManagersForWarehouses إذا WarehouseID لم يتم وضع علامة كما مستودع
  2. لا يسمح لإلغاء المستودع إذا كان هناك سجلات في ManagersForWarehouses

شكرا

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

المحلول

  1. في الإدارات الجدول ، إضافة فريدة من نوعها القيد (DepartmentID, IsWarehouse)
  2. في ManagersForWarehouses الجدول ، إضافة عمود IsWarehouse ، وقد تحقق القيد فرض أن IsWarehouse='Y'
  3. في ManagersForWarehouses الجدول ، إضافة FK على (WarehouseID , IsWarehouse) referrring إلى الإدارات(DepartmentID, IsWarehouse) و مع تتالي تحديث شرط.

و كنت كل مجموعة مع 100 ٪ الصخور الصلبة سلامة ، دون أي ثغرات.الموثوق بها فقط القيود لم يكن لديك أي ثغرات.المشغلات هي أقل موثوقية.

نصائح أخرى

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

لا تضع هذا النوع من القيود على الجدول ديسيبل.
فمن الأفضل أن فرض مثل هذا الشيء باستخدام رمز (منطق الأعمال).

تحرير:لا يتعلق السؤال ، ولكن يجب عدم استخدام الزناد وكذلك لإجراء التحديثات إلى الصفوف الأخرى.ليس لدي الصلبة وصلات إلى أنه حتى مع.

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