سؤال

إذا كنت قد قدمت:

  • المورد (معرف (PK) ، الاسم)
  • Manager (ID (PK) ، Resource_id (FK) ، Manager_Resource_ID (FK))

يجب أن يكون كل من Resource_id و Manager_ID مفاتيح أجنبية في مورد الطاولة.

من الواضح أنني لا أريد إدخال أي قيم في كل من هذه الأعمدة التي ليست موارد مناسبة

عندما أضيف العلاقة الأولى (Resource_id <-> id) فهي تعمل بشكل جيد ولكن

عندما أقوم بإضافة الثانية (manager_resource_id <-> id) ، فإنه يفشل مع الخطأ:

غير قادر على خلق العلاقة [. . . حدث الصراع في مورد الجدول ، معرف العمود

أو هل أحتاج إلى تقسيم هذا إلى 3 طاولات؟

المورد (معرف ، أولا ، الأخير)
Resource_Manager (ID ، Resource_id ، Manager_ID)
مدير (معرف)

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

المحلول

مجرد تلميح:

resourcemngr_model_01

تحديث:

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

resourcemngr_model_02

CREATE TABLE Employee
  ( 
   EmployeeID int NOT NULL
  ,[Name] varchar(50)
  )
go  
ALTER TABLE Employee ADD
CONSTRAINT PK_Employee PRIMARY KEY CLUSTERED (EmployeeID ASC)
go   

CREATE TABLE Manager
  ( 
   EmployeeID int NOT NULL
  ,ManagerID int NOT NULL
  )
go  
ALTER TABLE Manager ADD
 CONSTRAINT PK_Manager PRIMARY KEY CLUSTERED (EmployeeID ASC, ManagerID ASC)
,CONSTRAINT FK1_Manager FOREIGN KEY (EmployeeID) REFERENCES Employee(EmployeeID)
,CONSTRAINT FK2_Manager FOREIGN KEY (ManagerID) REFERENCES Employee(EmployeeID)
,CONSTRAINT chk_Manager CHECK (EmployeeID <> ManagerID) 
go  

نصائح أخرى

يجب عليك إنشاء المفاتيح الأجنبية في جدول المدير.

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