在SQL Server 2008中,如何将列指定为关系范围内唯一的列?

在SQL Server 2008中,如何将列指定为关系范围内唯一的列?,sql,sql-server,tsql,sql-server-2008,constraints,Sql,Sql Server,Tsql,Sql Server 2008,Constraints,举个例子比较容易。我有两张桌子:书和章节。两者都有Title和Id列。Chapters还有一个Book列,它是Books.Id的外键。书名是唯一的(我不想要两本书名相同的书) 现在我的问题是定义章节。标题的唯一性。我希望它和书一样独一无二。Id是一样的。因此,一本书可能没有两个章节具有相同的标题,但两本不同的书可能在一章中具有相同的标题 在SQLServer2008上可以这样做吗?如何?使用BookID列和Title列在章节上创建唯一索引(索引可能包括多个列,而不仅仅是一个列)因此在章节中,书籍

举个例子比较容易。我有两张桌子:书和章节。两者都有Title和Id列。Chapters还有一个Book列,它是Books.Id的外键。书名是唯一的(我不想要两本书名相同的书)

现在我的问题是定义章节。标题的唯一性。我希望它和书一样独一无二。Id是一样的。因此,一本书可能没有两个章节具有相同的标题,但两本不同的书可能在一章中具有相同的标题


在SQLServer2008上可以这样做吗?如何?

使用BookID列和Title列在章节上创建唯一索引(索引可能包括多个列,而不仅仅是一个列)

因此在
章节中,
书籍
标题
的组合必须是唯一的。只需创建一个跨越这些列的唯一索引,就完成了

顺便说一下,我忍不住这么想

(我不想要两本同名的书)


会回来咬你的,如果你真的在谈论现实世界的书的话。如果这只是一个示例,那么就不用担心了。

唯一约束或唯一索引。两个都可以

ALTER TABLE dbo.MyTable WITH CHECK ADD
    CONSTRAINT UQ_MyTable_BookTitle UNIQUE (BookID, Title)


向上投票赞成这样一个建议,即书名的强制唯一性会再次困扰你!这是一个意外,我编辑了它,这样我就可以删除它,并按照我的意图投票。很抱歉
CREATE UNIQUE INDEX IXU_MyTable_BookTitle ON dbo.MyTable (BookID, Title)