2009-12-27 1 views
1

если я внес:несколько ключей ограничений

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

Если resource_id и manager_id оба являются внешними ключами в таблице Ресурс.

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

, когда я добавить первое соотношение (resource_id < -> ID) он работает отлично, но

, когда я добавить второй (manager_resource_id < -> id) с ошибкой:

Невозможно создать отношения [. , .] Инструкция ALTER TABLE противоречила ограничению FOREIGN KEY [...]. Конфликт произошел в таблице Resource, идентификатор столбца

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

ресурсов (идентификатор, первый, последний)
Resource_manager (идентификатор, resource_id, manager_ID)
Manager (идентификатор)

ответ

1

Только намек:

resourcemngr_model_01

UPDATE:

Если ваша модель имеет сотрудника-менеджера, как многие-ко-многим (немного необычно), то вы можете сделать:

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 
+0

, если я являюсь иностранным ключом обратно в ту же таблицу для идентификатора ресурса и идентификатора менеджера, действительно ли мне нужно 3 таблицы? – leora

+0

«Ресурс» предназначен для ресурсов; «Сотрудник» для сотрудников «ManagerID (BossID)» предназначен для корпоративной иерархии (кто сообщает кому). 'ResourceManager' описывает, кто отвечает за то, что я предполагаю, что ресурс не является сотрудником, а вещью или« внешним объектом ». –

+0

извините. , возможно, неправильные имена. , Я использую Resource в качестве таблицы сотрудников. Я не хочу, чтобы ресурс имел идентификатор менеджера, так как некоторые ресурсы имеют несколько менеджеров (таким образом, исходные 2 таблицы). – leora

0

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

+0

Я собирался попросить автора опубликовать свой код, но я думаю, что вы правы в том, что их проблема. –

+0

они есть. , я обновил вопрос, чтобы быть более явным – leora