2015-03-13 53 views
0

我正在爲一家公司設計一個新的數據庫,試圖保持與外鍵等完整性的嚴格約束。我有一張表[Member],它持有系統上的公司。此表格有一列[internalContact],供我們公司中處理此用戶的用戶使用,該用戶通過用戶標識鏈接到用戶表。SQL Server:創建一個條件的外鍵

我想知道的是,如果可以爲外鍵分配一個條件,因爲users表包含內部和外部用戶。即。該字段只接受用戶類型爲5的用戶標識。可以這樣做,還是我只能在我的應用程序代碼中控制該標識?

謝謝

+0

這一問題的可能的重複:http://stackoverflow.com/questions/2409033/sql-server-conditional-foreign-key-constraints – 2015-03-13 08:32:38

+0

我認爲你可以創建檢查約束。此外,這是理想scenrio而不是觸發器.IMHO,而不是觸發器將更多優化。我錯了嗎? – KumarHarsh 2015-03-13 08:36:00

回答

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