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
我正在为一家公司设计一个新数据库,试图对外键等保持严格的约束以确保完整性。我有一个 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