【发布时间】:2025-12-27 12:50:11
【问题描述】:
我有两张桌子,
CREATE TABLE ActivityCodes (
ActivityCodeID INT NOT NULL PRIMARY KEY,
LocationID INT NOT NULL
);
和
CREATE TABLE LocationSettings (
LocationID INT NOT NULL PRIMARY KEY,
DefaultFooActivityCodeID INT,
FOREIGN KEY (DefaultFooActivityCodeID) REFERENCES ActivityCodes(ActivityCodeID)
);
与所示的外键关系。活动代码仅对LocationSettings 表中给定的LocationID 和DefaultFooActivityCodeID 有效,应为ActivityCodeID,其中ActivityCodes.LocationID == LocationSettings.LocationID。如何在 SQL 中强制执行该操作?可以用约束或外键来完成吗?有可能吗?
编辑:只是为了添加一些说明,这些表中的有效数据应该是这样的:
ActivityCodes
| ActivityCodeID | LocationID |
|---|---|
| 1 | 123 |
| 2 | 123 |
| 3 | 456 |
| 4 | 456 |
LocationSettings
| LocationID | DefaultFooActivityCodeID |
|---|---|
| 123 | 1 |
| 456 | 4 |
一个位置可以有多个活动代码。位置的默认活动代码必须是该位置的活动代码。 @Charlieface 我尝试按照answer you linked 中的建议使用复合外键,但我收到一条错误消息,指出ActivityCodes 上的LocationID 既不是唯一键也不是主键(我使用的是MS SQL Server)。
【问题讨论】:
-
@Charlieface 感谢您的链接。让我试着理解那个问题和答案的意思,因为我对 SQL 不是很熟悉。希望它能回答我的问题:)
标签: sql sql-server foreign-keys constraints