2014-10-31 2 views
0

신제품을 삽입 할 때 oracle 11gr2를 사용하고 제품 테이블에 대해 1부터 65535까지 자동 증가 ID를 할당해야합니다. 제품을 삭제할 수 있습니다. 65535 번째에 도달하면 새로운 ID를 할당 할 수있는 빈 구멍을 찾기 위해 테이블을 스캔해야합니다. 이 요구 사항 오라클 시퀀스를 사용할 수 없으므로 무료 ID를 생성하기 위해 함수를 사용하고 있습니다 (삽입시 트리거 시도) ... 문제는 배치 삽입을 처리 할 수 ​​없다는 것입니다 그리고 동시성 문제가 있습니다 ... 어떻게이 문제를 해결할 수 있습니까? 외부 ID 생성기의 일종을 사용하여?간격 내 오라클 시퀀스 생성기

+0

예를 게시하십시오. –

+5

** ** 제품 ID **를 다시 사용 하시겠습니까? 비즈니스 프로세스 관점에서 볼 때 이것은 거의 항상 좋은 생각이 아닙니다. –

답변

0

소리가 임의의 디자인과 비슷합니다. 최대 16 비트 제품 ID 또는 ID 재사용이 필요한 이유가 있습니까? 두 제약 조건 모두 나쁜 습관입니다.

나는 외부 생성기가 오라클이 제공하지 않는 것을 제공 할 것인지 의심 스럽다. 배치 삽입에 시퀀스를 사용하는 것이 좋습니다. 문제는 ID를 재활용하는 방법입니다. 오라클 일반 시퀀스는 기본 키를 추적하지 않으므로 리사이클 된 키를 먼저 찾은 다음 아마 시퀀스로 대체하는 솔루션이 필요합니다.

제품 ID 재활용

  1. 일괄 삽입 - 키를 넣기 처음 사용 순서. 이 작은 범위의 경우 간격에 NOCACHE를 설정하여 간격을 없앱니다.
  2. 삭제 - 제품이 삭제되면 실제로 행을 삭제하는 대신 행에 DELETED = 'Y'플래그를 설정하십시오.
  3. 삽입 - DELETED 플래그 세트를 사용하여 사용 가능한 첫 번째 레코드를 업데이트하거나 DELETED = 'Y'인 제품 테이블에서 최소 ID를 선택하십시오. 새로운 제품 정보 (그러나 같은 ID)와 세트 삭제됨 = 'N'
  4. 이 새로운 시퀀스 ID를

    데이터베이스의 논리를 구현하려면

    를 삽입하기 전에 항상 재활용 보장

와 기록을 갱신, 삽입을 수행하기 위해 DELETED = 'N'및 INSTEAD OF INSERT 트리거가있는 뷰 (VIEW $ PRODUCTS)를 작성할 수 있습니다.

시퀀스가 ​​불규칙하거나 (시퀀스 랩핑이) 실행되는 경우 어떤 경우에도 일괄 처리 삽입물을 사용할 수 없습니다. 내가 너라면 그 부분을 다시 생각해 봐야겠다.

+0

의견을 보내 주셔서 감사합니다. productID는 실제 기본 키가 아닙니다. 비즈니스 이유 때문에 1-65535 범위의 각 비즈니스 ID를 할당해야합니다 (이 제품 파일을 이진 파일로 처리하여이 제품 카탈로그를 처리 할 수없는 AVM으로 전송해야합니다. 최대 16 비트 제품 ID까지) ... 현재 역사를 추적해야하기 때문에 이미 소프트 삭제 기능을 사용하고 있으며 기간이 지나면 실제 삭제를 수행하므로 솔루션을 사용할 수 없습니다. 1에서 6535 개의 고유 한 고유 제품 ID가 있어야한다고 생각합니다. 그리고 같은 ID를 가진 잠재적으로 비활성화 된 것으로 표시된 제품은 ... – Dypso

+0

1에서 6535 - 이것은 오타입니까? – codenheim

+0

예! 그 범위는 1에서 65535 사이였습니다. – Dypso