2016-07-12 5 views
1

데이터베이스에 문제가 있습니다. 나는 더비 DB, 쿠폰 ID 열이 식별자에 의해 결정된다 가지고, 그것은 1ID가 IDENTITY COLUMN 인 경우 ID를 제거하거나 변경하는 방법은 무엇입니까?

표 예에 의해 증가 :

CREATE TABLE Coupon 
(
    COUPON_ID BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1), 
    TITLE VARCHAR(30), 
    START_DATE DATE, 
    END_DATE DATE, 
    AMOUNT INTEGER, 
    TYPE VARCHAR(20), 
    MESSAGE VARCHAR(300), 
    PRICE DOUBLE, 
    IMAGE VARCHAR(500), 
    CONSTRAINT PRIME_COUPON_ID PRIMARY KEY(COUPON_ID) 
); 

이의 말을하자, 나는 새로운 데이터를 입력하거나 삭제 ..., 그리고 모든 것이 정상적으로 작동합니다. 삭제할 때 다음과 같은 질문이 있습니다. 다음은 일부 데이터를 삭제할 때의 질문입니다. 일정한 양의 줄이 있으면 1000 개를 허용하고 제거하려고합니다. 모든 것이 정상적으로 제거되고 모든 것이 정상적으로 작동합니다. 하지만 여기에 한 가지 질문이 있는데,이 빈 줄을 어떻게하면됩니까? Derby는 데이터를 삽입하기를 원한다면 식별 된 열의 COUPON_ID 열의 ID와 자동으로 증가하기 때문에 거부합니다.

그리고 빈 줄 간격을 수집하지 않았 으면합니다. 이 문제에 대한 결정이 있습니까?

답변

2

하지만 여기에 질문이 있는데,이 빈 줄은 어떻게해야합니까? 그들에게 데이터를 삽입하고 싶다면 Derby는 거절합니다. 식별 된 열의 COUPON_ID 열의 ID와 그 값이 자동으로 증가하기 때문입니다.

ID를 다시 사용할 수없는 이유는 ID 열이 ID 열이 아니지만 GENERATED ALWAYS으로 표시되어 있다고 생각하는 경향이 있습니다. 어떤 경우에도 DB에서 행을 삭제하면 "빈 행"이 발생하지 않습니다. 나중에 사용되지 않는 ID 값이 있지만 이러한 공간은 효과적으로 공간을 소비하지 않습니다.

더 이상 사용되지 않는 ID는 무시해야합니다. 자동 생성 된 ID의 목적은 행을 고유하게 식별하는 인 입니다. 그렇기 때문에 가치가 그 목적을 달성한다는 것만 중요합니다. 특별한 의미는 ID 값에 속하지 않아야하며 확실히 그들 사이의 틈을 고려하지 않아야합니다.

그리고 빈 줄 간격을 수집하지 않았 으면합니다. 이 문제에 대한 결정이 있습니까?

열 정의를 변경하려는 경우 ID를 다시 사용할 수는 있지만 그렇게해서는 안됩니다. ID 값이 부족한 많은 삭제 작업을 수행하지 않으면 갭이 문제가되지 않습니다.

관련 문제