PK를 ROWGUIDCOL로 사용하거나 별도의 rowguid 열을 사용합니까?


9

여기에 긴 토론이 진행되어 다른 의견을 듣고 싶습니다.

uniqueidentifier 클러스터 PK가있는 많은 테이블이 있습니다. 이것이 좋은 아이디어인지의 여부는 여기서 다루지 않습니다 (그리고 곧 변경되지 않을 것입니다).

이제 데이터베이스를 병합 게시해야하고 DEV는 기존 PK를 ROWGUIDCOL로 표시하는 대신 별도의 rowguid 열을 사용하도록 권장하고 있습니다.

기본적으로 그들은 응용 프로그램이 복제에서만 사용되는 항목을 도메인으로 가져 와서는 안된다고 말합니다 (이것은 단지 "DBA").

성능 관점에서 볼 때 기존 열로 수행 할 수있는 작업을 수행하기 위해 새 열을 추가해야하는 이유가 없습니다. 게다가, 그것은 단지 "DBA 일"이기 때문에, DBA가 선택하게하지 않겠습니까?

나는 DEV의 요점을 이해하지만 여전히 동의하지 않습니다.

생각?

편집 : 나는이 토론에서 소수에 있다고 덧붙이고 싶습니다. 내 입장을 묻는 DEV는 내가 존경하고 신뢰하는 사람들입니다. 이것이 내가 의견을 요구하는 이유입니다.
나도 뭔가 빠졌을 수도 있고 그들의 요점을 오해했을 수도 있습니다.


향후 PK 값을 변경해야 할 가능성이 있습니까?
Robert L Davis

아니 정말. 대리 키이므로 앱이 해당 열을 실제로 사용하지 않습니다. 절대 변경되지 않으며 사용자에게 표시되지 않습니다.
spaghettidba

그들은 왜 별도의 행 가이드를 원합니까? 그리고 가능하다면 PK를 위해 어떤 체계를 선택하고 그 이유는 무엇입니까?
JustinC

@spaghettidba 교차 도메인에 대해 말하면 앱 코드에서 사용하거나 사용하지 않아야 할 디자인 패턴을 얼마나 자주 말합니까? "도메인"을 고수해야합니까? ;-). 또한 모든 테이블에 16 바이트 열을 추가하면 성능이 끔찍하며 아무런 이점이 없습니다.
Solomon Rutzky 2016 년

답변:


7

기본적으로 그들은 응용 프로그램이 복제에서만 사용되는 항목을 도메인으로 가져 와서는 안된다고 말합니다 (이것은 단지 "DBA").

나는 완전히 동의합니다. 그러나 ... 기본 키 복제에만 사용되는 것이 아닙니다 (아마도 응용 프로그램은 어떤 식 으로든 사용합니다 ). 이러한 맥락에서 논쟁은 의미가 없다.

어쨌든, 내가 아는 한,이 "DBA 물건"이 도메인 경계를 넘을 수있는 방법은 2 가지뿐입니다.

  1. 애플리케이션 ROWGUIDCOL이 다음과 같이 열 을 참조하는 쿼리를 사용중인 경우 :

    DECLARE @a table (id uniqueidentifier ROWGUIDCOL);
    
    SELECT ROWGUIDCOL FROM @a;

    아직이 속성이없는 열이 없다고 가정하므로 응용 프로그램 에서이 작업을 수행하지 않을 것입니다. (그런데 ROWGUIDCOL복제와는 완전히 별개의 개념입니다. 병합 복제에서도 사용됩니다.)

  2. 기본 키 열은 더 이상 업데이트 할 수 없습니다. 응용 프로그램이이 일을하고 변화가 다른 알고리즘을 사용하려고하지 않을 경우,이 없습니다 선택의 여지는 있지만, 테이블에 새 열을 추가, 따라서 더 논의가 필요하지 않습니다.

그 행동 이외의 ROWGUIDCOL속성은 완전히 투명합니다. 당신은 그것을 추가 할 수 있으며 응용 프로그램은 알 수 없습니다. 모든 유형의 데이터 복제 시나리오는 가능한 한 응용 프로그램에 투명해야합니다.


대답 해줘서 고마워. 아니요, 응용 프로그램이 1 또는 2를 수행하지 않습니다. 완전성을 위해 일부 테이블은 PK의 ROWGUIDCOL 속성으로 이미 장식되어 있습니다.
spaghettidba

필자는 복제가 응용 프로그램에 투명해야한다는 데 동의하지만 게시 해야 할 데이터베이스 는 처음부터 복제 해야 한다고 생각합니다. 예를 들어, 병합 복제의 ID 관리는 전적으로 PITA입니다. 처음부터 게시를 병합해야한다는 것을 알고 있다면 멀리 떨어져 있어야합니다.
spaghettidba

@ spaghettidba : 그렇습니다. 복제가 카드에 있으면 데이터베이스가 반드시 그것을 설계해야한다는 데 전적으로 동의합니다. 종종 모범 사례를 따르는 것만으로도 대부분의 방법을 얻을 수 있습니다. 디자인 문제가 가장 많은 추악하고 털이 많은 레거시 데이터베이스입니다. 내 경험상 특히 병합 복제는 다른 복제 메커니즘보다 훨씬 어렵습니다.
Jon Seigel

@spaghettidba와 Jon : FYI만으로, 적어도 SQL Server 2008 R2 (FeatureID 182 검색) 이후 ROWGUIDCOL해당 컨텍스트에서 (예 : CREATE TABLE/ ALTER TABLE문이 아닌 ) 사용이 더 이상 사용되지 않습니다 . $ROWGUID
Solomon Rutzky 2016 년

6

동의한다. PK 값을 변경할 필요가없는 한 기존 uniqueidentifier 열을 rowguidcol로 사용하는 것이 좋습니다.


5

"기본적으로 그들은 응용 프로그램이 복제에서만 사용되는 항목을 도메인으로 가져 와서는 안된다고 말합니다 ("DBA에만 해당 ").

그러나 복제에만 사용되지는 않습니다. 또한 PK이기도합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.