约束表,使每个帐户可以拥有另一个表

时间:2013-07-15 19:33:33

标签: sql sql-server

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

  • Id(主键):id。
  • OwnerId(外键):所有者的ID,位于另一个表中。
  • TypeId(外键):此记录所代表的内容类型。存在有限数量的类型,这些类型在另一个表中表示。这链接到该表。
  • TypeCreatorId(ForeignKey):TypeId表示的类型的所有者。
  • SourceId(外键):这对这个问题并不重要。

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

2 个答案:

答案 0 :(得分: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)
    
  3. 基本上,两件事都达到了同样的效果 - 你不能有两行具有相同的(Id, TypeCreatorId)值。

答案 1 :(得分:1)

只需在OwnerIdTypeCreatorId上创建唯一索引。

使用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