0

我有一个包含这些列的表:

  • Id(主键):id。
  • OwnerId(外键):所有者的id,驻留在另一个表中。
  • TypeId(外键):这个记录所代表的事物的类型。有有限数量的类型,它们在另一个表中表示。这链接到该表。
  • TypeCreatorId(ForeignKey):TypeId所代表的类型的拥有者。
  • SourceId(外键):这对这个问题并不重要。

我需要约束这个表,使得对于每个 Id,每个 TypeCreatorId 只能有一个。我希望这是有道理的!

4

2 回答 2

2

对于 SQL Server,您有两种选择:

  1. 创建一个UNIQUE CONSTRAINT

    ALTER TABLE dbo.YourTable
    ADD CONSTRAINT UNIQ_Id_TypeCreator UNIQUE(Id, TypeCreatorId)
    
  2. 创建一个UNIQUE INDEX

    CREATE UNIQUE INDEX UIX_YourTable_ID_TypeCreator
    ON dbo.YourTable(Id, TypeCreatorId)
    

基本上,这两件事都达到了同样的目的——你不能有两行具有相同的(Id, TypeCreatorId)值。

于 2013-07-15T19:47:25.600 回答
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
于 2013-07-15T19:38:34.420 回答