SQL服务器:创建一个带条件的外键

SQL Server : create a foreign key with a condition

我正在为一家公司设计一个新数据库,试图对外键等保持严格的约束以确保完整性。我有一个 table [Member] 在系统上持有公司。此table有一列[internalContact]为我们公司的用户,该用户与该会员打交道,该会员已通过用户id链接到用户table。

我想知道是否可以为外键分配条件,因为用户 table 包含内部用户和外部用户。 IE。让该字段只接受用户类型为 5 的用户 ID。这可以做到吗,或者我只能在我的应用程序代码中控制它吗?

谢谢

您可以为此使用检查约束。 (代码未经测试,会有一些语法错误)

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)

然后创建一个函数 isInternalUser returns 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 internal>
      RETURN(@CtrPrice)
  END
GO