Вопрос

если у меня есть таблица:

  • Ресурс (идентификатор (PK), имя)
  • Менеджер (id (PK), resource_id (FK), manager_resource_ID(FK))

Должны ли resource_id и manager_id оба быть внешними ключами в Ресурс таблица.

я, очевидно, не хочу вводить какие-либо значения в каждый из этих столбцов, которые не являются надлежащими ресурсами

когда я добавляю первое отношение (resource_id <-> id) это работает нормально, но

когда я добавляю второй (manager_resource_id <-> id) он завершается с ошибкой:

Не удается создать отношения [ ...] Оператор ALTER TABLE конфликтовал с ограничением ВНЕШНЕГО КЛЮЧА [...].Конфликт произошел в табличном ресурсе, идентификатор столбца

или мне нужно разбить это на 3 таблицы?

Ресурс (идентификатор, первый, последний)
Resource_manager (идентификатор, resource_id, manager_ID менеджера)
Менеджер (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  

Другие советы

Вы должны создать внешние ключи в таблице Manager.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top