Łatwiej jest z przykładem. Mam dwie tabele: książki i rozdziały. Oba mają kolumny Tytuł i ID. Rozdziały mają również kolumnę Książka, która jest obcym kluczem do Books.Id. Books.Title jest wyjątkowy (nie chcę dwóch książek o tym samym tytule).
Teraz mój problem polega na zdefiniowaniu rozdziału.Unikalność tytułu. Chcę, żeby była wyjątkowa, o ile Books.Id jest taka sama. Tak więc jedna książka może nie mieć dwóch rozdziałów o tym samym tytule, ale dwie różne książki mogą mieć ten sam tytuł w jednym rozdziale.
Czy to możliwe w SQL Server 2008? W jaki sposób?
Odpowiedzi:
5 dla odpowiedzi № 1UNIQUE CONSTRAINT lub UNIQUE index. Każda z nich to zrobi.
ALTER TABLE dbo.MyTable WITH CHECK ADD
CONSTRAINT UQ_MyTable_BookTitle UNIQUE (BookID, Title)
lub
CREATE UNIQUE INDEX IXU_MyTable_BookTitle ON dbo.MyTable (BookID, Title)
3 dla odpowiedzi № 2
Stwórz UNIKALNY INDEKS na rozdziałach używając kolumn BookID i Title (indeksy mogą zawierać kilka kolumn, a nie tylko jeden)
2 dla odpowiedzi nr 3
Więc wewnątrz Chapter
, jest to połączenie Book
i Title
to musi być wyjątkowe. Po prostu utwórz indeks UNIQUE obejmujący te kolumny i gotowe.
Przy okazji, nie mogę pomóc, ale pomyśl o tym
(Nie chcę dwóch książek o tym samym tytule)
powróci i cię ugryzie, jeśli rzeczywiście mówisz o książkach z prawdziwego świata, jeśli to tylko przykład, to nie martw się.