Odbywa się tutaj długa debata, więc chciałbym usłyszeć inne opinie.
Mam wiele tabel z klastrowanym unikalnym identyfikatorem PK. To, czy jest to dobry pomysł, jest tutaj poza zakresem (i to się wkrótce nie zmieni).
Teraz baza danych musi zostać opublikowana w trybie scalania, a DEV zalecają użycie oddzielnej kolumny rowguid zamiast oznaczania istniejącej PK jako ROWGUIDCOL.
Zasadniczo mówią, że aplikacja nigdy nie powinna przenosić do swojej domeny czegoś, co jest używane tylko przez replikację (jest to dla nich tylko „baza danych DBA”).
Z punktu widzenia wydajności nie widzę powodu, dla którego powinienem dodać nową kolumnę, aby zrobić coś, co mógłbym zrobić z istniejącą. Co więcej, skoro to tylko „rzeczy DBA”, dlaczego nie pozwolić DBA wybrać?
W pewnym sensie rozumiem punkt DEV, ale nadal się nie zgadzam.
Myśli?
EDYCJA: Chcę tylko dodać, że jestem w mniejszości w tej debacie, a DEV kwestionujący moje stanowisko to ludzie, których szanuję i którym ufam. Z tego powodu poprosiłem o opinie.
Mogłem też coś przeoczyć i mogłem źle zrozumieć ich punkt widzenia.
źródło
Odpowiedzi:
Zgadzam się całkowicie. Ale ... klucz podstawowy nie jest używany tylko do replikacji (prawdopodobnie aplikacja używa go w jakiś sposób). Argument ten nie ma sensu w tym kontekście.
W każdym razie, o ile mi wiadomo, są tylko dwa sposoby, aby „DBA” przekroczyło granicę domeny:
Jeśli aplikacja używa zapytań, które odwołują się do
ROWGUIDCOL
kolumny w następujący sposób:Zakładam, że żadna z twoich kolumn nie ma jeszcze tej właściwości, więc aplikacja by tego nie robiła. (Nawiasem mówiąc,
ROWGUIDCOL
jest to zupełnie odrębna koncepcja od replikacji. Tak się składa, że replikacja scalająca używa jej.)Kolumna klucza podstawowego nie będzie już możliwa do aktualizacji. Jeśli aplikacja to robi i nie zostaną wprowadzone zmiany w celu użycia innego algorytmu, nie ma innego wyboru, jak dodać nową kolumnę do tabeli, a zatem nie jest wymagana dyskusja.
Oprócz tych zachowań
ROWGUIDCOL
właściwość jest całkowicie przezroczysta. Możesz go dodać, a aplikacja nigdy się nie dowie. Jakikolwiek rodzaj replikacji danych scenariusza powinny być jak najbardziej przejrzyste dla aplikacji.źródło
ROWGUIDCOL
w tym kontekście (tj. nie w instrukcjiCREATE TABLE
/ALTER TABLE
) jest przestarzałe od co najmniej SQL Server 2008 R2 (poszukiwanie FeatureID 182) na korzyść$ROWGUID
.Zgadzam się. Tak długo, jak nie ma potrzeby zmiany wartości PK, lepiej byłoby użyć istniejącej unikalnej kolumny identyfikatora jako argumentu wiersza.
źródło
„Zasadniczo mówią, że aplikacja nigdy nie powinna przenosić do swojej domeny czegoś, co jest używane tylko przez replikację (jest to dla nich tylko„ baza danych DBA ”).”
Ale to nie jest używane tylko do replikacji. To także (i już) twój PK.
źródło