【发布时间】:2017-02-01 10:34:39
【问题描述】:
我有一个数据库,其中有两个表:
CREATE TABLE Transactions (
ID BIGINT IDENTITY(1,1) NOT NULL,
AccountID BIGINT NOT NULL,
Amount BIGINT NOT NULL,
CONSTRAINT PK_Transactions PRIMARY KEY CLUSTERED (ID ASC,AccountID ASC),
CONSTRAINT FK_Transaction_Account FOREIGN KEY (AccountID) REFERENCES Accounts(ID)
);
CREATE TABLE Accounts (
ID BIGINT IDENTITY(1,11) NOT NULL,
Balance BIGINT NOT NULL,
CONSTRAINT PK_Accounts PRIMARY KEY (ID)
);
交易通过我编写的存储过程插入到他们的表中,因此当账户 1 将 25 个“硬币”转移到账户 21 时会生成 两 行:
ID | AccountID | Amount
-------------------------
1 | 1 | -25
-------------------------
1 | 21 | 25
在上述架构中,我希望第一行根据 ID 引用底行,并且 AccountID 不等于 到底行的 AccountID。
反之亦然。
我想要做的看起来像这样:
CONSTRAINT FK_Transaction_Counterpart FOREIGN KEY (ID) REFERENCES Transactions(ID) WHERE thisRow.AccountID != referencedRow.AccountID
我在关于表格约束的文档中没有发现这种可能性。
因此,出于好奇和使用它的意图,我问,这可能吗?如果是,如何?
编辑:
答案表明这是不可能的,我应该调整我的设计或意图。
我想我会在功能代码中将两个事务行相互分配。
【问题讨论】:
标签: sql-server database-design foreign-keys constraints