Como posso especificar uma coluna para ser exclusivo no âmbito de uma relação no SQL Server 2008?
-
06-07-2019 - |
Pergunta
É mais fácil com um exemplo. Eu tenho duas tabelas: Livros e Capítulos. Ambos têm Título e código colunas. Capítulos também tem uma coluna de livro que é uma chave estrangeira para Books.Id. Books.Title é único (eu não quero dois livros com o mesmo título).
Agora o meu problema é definir singularidade Chapter.Title. Eu quero que seja única, enquanto Books.Id é o mesmo. Assim que um livro pode não ter dois capítulos com o mesmo título, mas dois livros diferentes podem ter o mesmo título em um capítulo.
Isso é possível no SQL Server 2008? Como?
Solução
restrição exclusiva ou índice exclusivo. Qualquer um vai fazer.
ALTER TABLE dbo.MyTable WITH CHECK ADD
CONSTRAINT UQ_MyTable_BookTitle UNIQUE (BookID, Title)
ou
CREATE UNIQUE INDEX IXU_MyTable_BookTitle ON dbo.MyTable (BookID, Title)
Outras dicas
Criar um índice exclusivo em capítulos, utilizando colunas BookID e título (índices podem incluir várias colunas, não apenas um)
Assim, dentro Chapter
, é a combinação de Book
e Title
que deve ser exclusivo. Basta criar um índice UNIQUE abrangendo as colunas, e está feito.
A propósito, não posso deixar de pensar que
(Eu não quero dois livros com o mesmo título)
vai voltar e mordê-lo, se você está realmente falando de livros do mundo real. Se este é apenas um exemplo, então não se preocupe.