2010-12-14 13 views
26

Przepraszam za pytanie, co wydaje się być zmęczonym pytaniem, ale żadna odpowiedź forum ani dokumentacja, którą przeczytałem, nie wydają się stanowić odpowiedniej odpowiedzi.MS SQL Server Wiersz Kolumna GUID

Jaki jest cel właściwości Row GUID Column w MS SQL Server 2008?

Pozwolę sobie na to dalej. Widziałem "Nie używaj GUID jako PK" jako odpowiedź na to pytanie, które wydaje mi się zupełnie niezwiązane ze mną. Jeśli ustawię Row GUID Column jest to wymuszenie, że kolumna GUID jest klucz podstawowy lub coś podobnego?

Aby ponownie sformułować moje oryginalne pytanie: Jeśli w tabeli mam kolumnę GUID, która nie odgrywa żadnej roli w indeksowaniu, czy mogę uzyskać cokolwiek od ustawienia tej kolumny GUID jako Row GUID Column?

Odpowiedz

33

Umożliwia użycie zmiennej $ ROWGUID zamiast nazwy kolumny. Służy głównie do replikacji scalania. Nie wymusza ono kolumny GUID dla PK, można jawnie zadeklarować tylko PKs. Odpowiedź na ostatnie pytanie brzmi "nie", chyba że planujesz implementację replikacji scalania.

+0

Tak jasne, tak zwięzłe, dziękuję wszystkim> _ instantmusic

+1

Nice. I tylko FYI, począwszy od SQL Server 2012, jest również używany do funkcji [FILESTREAM] (https://msdn.microsoft.com/en-us/library/gg471497.aspx) :-). –

1

Kolumna RowGUID służy do replikacji. Pozwala na poprawne scalenie mechanizmu replikacji. Po włączeniu replikacji kolumna ta zostanie dodana do tabel, które nie mają jeszcze kolumny RowGUID.

Nic nie zyskasz, używając go, chyba że planujesz wdrożyć replikację. Jest to równoważne ustawieniu newsequentialid() jako wartością domyślną dla kolumny.

0

Nie wymusza to, aby był kluczem podstawowym, właściwość określa jedynie, czy pole zostanie automatycznie zaktualizowane. JEŚLI chcesz utworzyć identyfikator GUID w aplikacji i wysłać go, ustaw tę właściwość na wartość false, w przeciwnym razie ustaw ją na wartość true i pozwól, aby baza danych została utworzona automatycznie. Jeśli pole jest indeksem klastrowym, upewnij się, że wartość domyślna to NEWSEQUENTIALID().

7

ROWGUIDCOLUMN jest używany głównie w scenariuszach replikacji, w których należy połączyć zawartość kilku tabel danych satelitarnych w jeden centralny DB.

Dodanie ROWGUIDCOLUMN do replikowanych tabel zapewnia, że ​​mechanizm replikacji może używać pola ROWGUIDCOLUMN do rozróżniania rekordów z tymi samymi wartościami kluczy głównych.

Ponieważ jest to funkcja używana głównie w celu zapewnienia płynnej replikacji, należy unikać używania tej kolumny jako klucza głównego. Klucz podstawowy powinien być logiczną jednostką organizacyjną, która jest pod Twoją kontrolą i która nie ma wpływu na charakterystykę operacyjną określonych funkcji wybranego silnika DB.

+0

Doskonałe wyjaśnienie! –

+0

Wielkie dzięki. Cieszę się, że to miało sens :) –

+0

Rich (i @Jeffrey): w jaki sposób oznaczenie kolumny jako 'ROWGUIDCOL' _ensure_", którą silnik replikacji może użyć pola ROWGUIDCOLUMN do rozróżnienia rekordów z tymi samymi kluczowymi wartościami klucza "gdy nie gwarantuje wyjątkowość?Tak, domyślnie wartość będzie prawie zawsze unikalna, ale nic nie zapobiega ręcznemu dodawaniu zduplikowanych wartości poza dodaniem Unikalnego indeksu/ograniczenia. –

0

Nie, nie wymusza tego jako PK. Oznacza to, że nie można utworzyć drugiego unikalnego identyfikatora i określić go jako kolumnę GUID wiersza

Powiązane problemy