2015-03-13 5 views
0

Я разрабатываю новую базу данных для компании, пытаясь сохранить жесткие ограничения с помощью внешних ключей и т. Д. Для обеспечения целостности. У меня есть таблица [Member], в которой находятся компании в системе. Эта таблица имеет столбец [internalContact] для пользователя в нашей компании, который имеет дело с этим членом, который имеет чужой, связанный с таблицей пользователей по идентификатору пользователя.SQL Server: создать внешний ключ с условием

Что я хотел бы знать, так это, если можно назначить условие внешнему ключу, так как таблица users содержит внутренних и внешних пользователей. то есть. для того, чтобы поле принимало только идентификатор пользователя, где тип пользователя равен 5. Может ли это быть сделано, или я могу управлять этим только в своем коде приложения?

Thanks

+0

возможного дублирования этого вопроса : http://stackoverflow.com/questions/2409033/sql-server-conditional-foreign-key-constraints –

+0

Я думаю, что вы можете создать ограничение проверки. Также это идеальный сценарий вместо триггера .IMHO, вместо триггера будет больше оптимизировать. Я ошибаюсь? – KumarHarsh

ответ

0

Для этого можно использовать ограничение проверки. (код не тестировался некоторые синтаксические ошибки будут там)

CREATE TABLE Member 
(
    P_Id int NOT NULL, 
    LastName varchar(255) NOT NULL, 
    FirstName varchar(255), 
    Address varchar(255), 
    City varchar(255), 
    InternalContactId 
    CONSTRAINT chk_Person CHECK (isInternalUser(internalContactId) > 0) 
) 

ALTER TABLE Member 
ADD FOREIGN KEY (InternalContacId) 
REFERENCES Persons(P_Id) 

Тогда просто создать функцию iniInternalUser, которая возвращает 1, если пользователь в порядке, чтобы быть внутренний контакт

CREATE FUNCTION isInternalUser (@userId int(10)) 
    RETURNS int 
    AS 
    BEGIN 
     DECLARE @tmp int 
     SELECT @tmp = count(*) 
      FROM users 
     WHERE userId = @UserId and <check to see if user is ineternal 
     RETURN(@CtrPrice) 
    END 
GO 
Смежные вопросы