DB2 자동 생성 열/GENERATED ALWAYS 시퀀스에 대한 장단점

StackOverflow https://stackoverflow.com/questions/1026936

  •  06-07-2019
  •  | 
  •  

문제

이전에는 '항상 생성됨' 기본 키 값을 생성합니다.그러나 이제는 'GENERATED ALWAYS'를 사용하는 대신 기본 키 값을 채우기 위해 시퀀스를 사용해야 하는 것이 좋습니다.이러한 변화의 원인이 무엇이라고 생각하시나요?이것은 단지 선택의 문제일까요?

이전 코드:

CREATE TABLE SCH.TAB1
 (TAB_P         INTEGER         NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1, NO CACHE),
.
.
);

지금이야

CREATE TABLE SCH.TAB1
 (TAB_P         INTEGER ),
.
.
);

이제 삽입하는 동안 시퀀스를 통해 TAB_P 값을 생성합니다.

도움이 되었습니까?

해결책

나는 시퀀스보다 ID 열을 더 많이 사용하는 경향이 있지만 두 가지를 비교해 보겠습니다.

시퀀스는 어떤 목적으로든 숫자를 생성할 수 있지만 ID 열은 테이블의 열에 엄격하게 연결됩니다.

시퀀스는 독립적인 개체이므로 여러 테이블(또는 다른 것)에 대한 숫자를 생성할 수 있으며 테이블이 삭제될 때 영향을 받지 않습니다.ID 열이 있는 테이블이 삭제되면 해당 ID 열에 마지막으로 할당된 값에 대한 메모리가 없습니다.

테이블에는 하나의 ID 열만 있을 수 있으므로 동일한 테이블의 여러 열에 여러 순차 번호를 기록하려는 경우 시퀀스 개체가 이를 처리할 수 있습니다.

데이터베이스의 순차 번호 생성기에 대한 가장 일반적인 요구 사항은 행에 기술 키를 할당하는 것입니다. 이는 ID 열에서 잘 처리됩니다.더 복잡한 숫자 생성이 필요한 경우 시퀀스 객체가 더 많은 유연성을 제공합니다.

다른 팁

테이블에 많은 삭제가있는 경우 ID를 처리하는 것일 수 있습니다.

예를 들어 : 신분증의 경우 ID가 1 2 3 인 경우

이제 레코드 3을 삭제하면 테이블에 1 2가 있습니다.

그런 다음 새 레코드를 삽입하면 ID는 1 2 4입니다.

이와 반대로, ID 열을 사용하지 않고 코드를 사용하여 ID를 생성하는 경우 새 삽입물을 삭제 한 후 ID를 MAX (ID) + 1으로 계산할 수 있으므로 ID가 순서대로 1 2 3입니다.

다른 이유, 신원 열을 사용해서는 안되는 이유를 생각할 수 없습니다.

publib 사이트에서 찾은 내용은 다음과 같습니다.

IDENTITY 열과 시퀀스 비교

IDENTITY 열과 시퀀스 간에는 유사점이 있지만 차이점도 있습니다.데이터베이스와 애플리케이션을 설계할 때 각각의 특성을 사용할 수 있습니다.

ID 열에는 다음과 같은 특징이 있습니다.

  • 식별 열은 테이블을 만들 때만 테이블의 일부로 정의 될 수 있습니다.테이블이 만들어지면 ID 열을 추가하도록 변경할 수 없습니다.(그러나 기존의 정체성 열 특성이 변경 될 수 있습니다.)
  • ID 열은 단일 테이블의 값을 자동으로 생성합니다.
  • 신분 열이 항상 생성 된대로 정의되면 사용 된 값은 항상 데이터베이스 관리자에 의해 생성됩니다.응용 프로그램은 테이블 내용을 수정하는 동안 자체 값을 제공 할 수 없습니다.

시퀀스 개체에는 다음과 같은 특징이 있습니다.

  • 시퀀스 객체는 한 테이블에 묶이지 않는 데이터베이스 객체입니다.
  • 시퀀스 객체는 모든 SQL 또는 XQuery 문에 사용할 수있는 순차적 값을 생성합니다.
  • 시퀀스 객체는 임의의 애플리케이션에 의해 사용할 수 있으므로 지정된 시퀀스에서 다음 값의 검색을 제어하는 ​​데 사용되는 두 가지 표현이 있고 실행중인 명령문 이전에 생성 된 값이 있습니다.이전 값 표현식은 현재 세션 내에서 이전 문에 대해 지정된 시퀀스에 대해 가장 최근에 생성 된 값을 반환합니다.다음 값 표현식은 지정된 시퀀스의 다음 값을 반환합니다.이러한 표현식을 사용하면 여러 테이블 내의 여러 SQL 및 XQuery 문에서 동일한 값을 사용할 수 있습니다.

이것이 두 항목의 모든 특성은 아니지만 이러한 특성은 데이터베이스 설계 및 데이터베이스를 사용하는 애플리케이션에 따라 사용할 항목을 결정하는 데 도움이 됩니다.

왜 누군가가 시퀀스가 ​​아닌 ID 열을 사용하는지 모르겠습니다.시퀀스는 동일한 작업을 수행하며 훨씬 더 간단합니다.ID 열은 특히 다른 환경으로 데이터를 언로드 및 로드하려는 경우 훨씬 더 어렵습니다.해당 정보는 매뉴얼에서 찾을 수 있으므로 모든 차이점을 다루지는 않겠지만, ID가 있는 테이블이 있을 때 사용자가 한 환경에서 다른 환경으로 데이터를 마이그레이션하려고 할 때마다 거의 항상 DBA가 참여해야 한다는 점을 말씀드릴 수 있습니다. 사용자에게 혼란을 줄 수 있기 때문에 관련됩니다.시퀀스를 사용해도 문제가 없습니다.우리는 사용자가 필요한 경우 시퀀스를 변경할 수 있도록 스키마 개체를 업데이트할 수 있도록 허용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top