我有一个包含这些列的表:
Id
(主键):id。OwnerId
(外键):所有者的ID,位于另一个表中。TypeId
(外键):此记录所代表的内容类型。存在有限数量的类型,这些类型在另一个表中表示。这链接到该表。TypeCreatorId
(ForeignKey):TypeId表示的类型的所有者。SourceId
(外键):这对这个问题并不重要。我需要约束此表,以便对于每个Id,每个TypeCreatorId只能有一个。我希望这是有道理的!
答案 0 :(得分:2)
对于SQL Server,您有两个选择:
创建UNIQUE CONSTRAINT
ALTER TABLE dbo.YourTable
ADD CONSTRAINT UNIQ_Id_TypeCreator UNIQUE(Id, TypeCreatorId)
创建UNIQUE INDEX
:
CREATE UNIQUE INDEX UIX_YourTable_ID_TypeCreator
ON dbo.YourTable(Id, TypeCreatorId)
基本上,两件事都达到了同样的效果 - 你不能有两行具有相同的(Id, TypeCreatorId)
值。
答案 1 :(得分:1)
只需在OwnerId
和TypeCreatorId
上创建唯一索引。
使用MySQL的一个例子(抱歉,我不使用SQL Server):
alter table yourTable
add unique index idx_newIndex(OwnerId, TypeCreatorId);
示例。我会在这里说明这个新的唯一索引会发生什么:
OwnerId | TypeCreatorId
--------+--------------
1 | 1
1 | 2 -- This is Ok
2 | 1 -- Ok too
2 | 2 -- Ok again
1 | 2 -- THIS WON'T BE ALLOWED because it would be a duplicate