2012-10-15 8 views
2

나는 DB/최대 절전 모드에 새로운 코드를 발견데이터베이스에서 시퀀스를 사용하는 이유는 무엇입니까?

 
@SequenceGenerator(name = "entSeq", allocationSize = 5, sequenceName = "CODE_SEQ") 
... 
    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "entSeq") 

기본 키 순서를 설정합니다.

왜 시퀀스가 ​​기본 키의 값으로 사용 되었습니까? 어떤 목표를 언급했다 :

  • 증가 성능
  • 제약 조건을 추가, 일부 검사 ID의 정수 값의
  • 제한 가능한 값의 범위는, 왜 그렇게해야 할 일?
  • 왜 1부터 계산을 시작하나요?

나는의 구문과 사용법에 대해 읽어 :

하지만 내 질문에 대한 답을 발견하지 않습니다.

UPDATE : 어떻게 얻는 DB 이론에 문제가있는 것으로 나타 시퀀스 번호 생성기

:

  • http://www.oracle.com/technetwork/products/rdb/0307-sequences-130053.pdf 가이드 SQL 사용에 : 나는 독서 즐길

    기본 키의 고유 ID 그건 내가 내 자신의에서 기본 키 값을 제공하지 않고 테이블에 삽입을 할 수 있다는 것을 의미 :

     
        INSERT INTO suppliers 
        (supplier_id, supplier_name) 
        VALUES 
        (supplier_seq.nextval, 'Kraft Foods'); 
    

    하지만이 기능이 기본 키 값을 제공하라고 강요하지 않고 모든 DB에 존재해야 기대 .. .

    내가 옳다고 생각하니?

    UPDATE2 : 기존 데이터베이스에 시퀀스를 추가 할 때이 절은 유용 할 수 있습니다

    : 함께 START를 사용하는 이유에 대한

    대답. 이전 구성표가 응용 프로그램에서 에 있고 이미 법적 범위에서 일부 값을 소비 한 경우이 절은 사용 된 값을 건너 뛰는 데 사용되는 이 될 수 있습니다. MINVALUE 및 MAXVALUE는 유효 범위를 지정하는 데 사용되지만 START WITH은 이전에 생성 된 값 이 다시 나타나지 않도록 해당 범위 내에서 시퀀스 사용을 시작합니다.

    갱신 3 : * 시퀀스 *이 자동으로 모든 데이터베이스에 대한 키를 생성에 http://en.wikipedia.org/wiki/Surrogate_key

답변

0

당신 가 의존하지 수 있습니다 제공합니다. 다른 대부분의 데이터베이스와 달리 Oracle은 순차 기본 키 값을 생성하는 데 사용할 수있는 자동 증가 데이터 유형을 제공하지 않습니다.
그러나 시퀀스와 트리거로 동일한 효과를 얻을 수 있습니다.

+0

DB 공급 업체간에 DB 스키마를 이동할 수있는 이유는 무엇입니까? 이것이 순차 기본 키 값을 사용하는 이유입니까? 그것은 DB 뷰어에서 꽤 보였습니까? – gavenkoa

+0

@gavenkoa 영어가 나쁘다. 통역을하시기 바랍니다. – User404

+0

내 영어로 죄송합니다 (( – gavenkoa

1

역사적으로 두 가지 주된 이유가있었습니다.

  • 큰 테이블에서 ON UPDATE CASCADE의 성능 문제를 피하십시오.
  • 넓은 자연 키의 조인 성능 문제를 피하십시오.

오라클은 ON UPDATE CASCADE도 지원하지 않으므로 외래 키 참조에 사용되는 값을 업데이트하는 것이 다른 플랫폼보다 어렵습니다.

이러한 성능 "문제"는 20 년 전보다 같은 크기의 테이블보다 훨씬 덜 심각합니다. (하드웨어는 훨씬 빨라졌습니다.)하지만 우리는 20 년 전에했던 것보다 훨씬 더 큰 테이블을 처리하는 것 같습니다.

이러한 종류의 성능 조정에는 몇 가지 바람직하지 않은 부작용이 있습니다.

  • 일반적으로 신중하게 선택한 자연 키와 ON UPDATE CASCADE보다 더 많은 조인이 필요합니다. 조인이 디스크 읽기보다 비용이 많이 드는 경우가 많이 필요할 수 있습니다.
  • 20 개 또는 30 개가있는 조인에서 길을 잃는 것이 더 쉽습니다.
  • 행을 빨리 이해하기가 어렵습니다. ({1, 7, 13, 255, 438}을 읽는 행은 {1, 라이브러리, 체크 아웃, 255, 읽는 행보다 이해하기가 더 어렵습니다.)
  • 종종 a 데이터베이스 설계자는 ID 번호를 기본 키로 할당하지만 다른 UNIQUE 제약 조건은 설정하지 않습니다. 이는 ID 번호를 행 식별자가 아니라 행이 나타내는 실제 식별자로 지정합니다. 그럴 수 문제가 될 수 있습니다.
관련 문제