2013-04-30 2 views
1

좋아, 설명하기에 조금 이상하다. 최선을 다할 것이다. DB 테이블의 열 위치를 추적하는 방법

은 내가 DB 테이블 ( SQL)는 버전의 일부 다른 작업의 목록을 포함 버전라고합니다. 예를 들어

, 버전 1.0 : 내 코드에서

1. Insert XX 

2. Delete YY 

3. Insert XY 

는, 때때로,는 특정 버전의 운영을 업데이트해야합니다.

1. Insert XX 

2. Insert YX 

3. Delete YY 

4. Insert XY 

(이 여전히있을 것입니다 버전 1.0) : 그래서, 예를 들어, 내가 새로운 Insert YX 2. 위치 에 필요하다고 할 수 있습니다.

당신도 알다시피, 버전을 업데이트 할 때마다 일부 작업의 위치가 변경되어 초기 추적이 손실됩니다. 여러 번 업데이트 한 후 작업이 처음에는 같은 장소에 있었던 것은 거의 불가능합니다.

그래서 내 문제입니다. 나는 개별적으로 이러한 열 를 추적해야합니다

내가 "삽입 XX이"위치를 찾고 모든 쿼리를 할 수 없습니다, 내 테이블 내부에 하나 이상의Insert XX이있을 수 있기 때문이다.

제 질문은 SQL 테이블 내부의 위치 변경을 추적하는 솔루션이 있습니까?

프로그래밍 언어로 Java를 사용하고 매퍼로 ORMLite를 사용하는 PostgreSQL을 사용하고 있습니다.

미리 감사드립니다.

답변

3

당신은 순서

id seq val 
    1 1 Insert XX 
    2 2 Delete YY 
    3 3 Insert XY 

당신이 POS 2에 새로운 항목을 추가하기위한 행과 열 필드에 고유 ID 필드를 사용할 수 있습니다 (이것은 다음 ID (4)를 얻을, 당신은 할 seq> = 2로 설정하여 seq = sql + 1을 설정하십시오)

id seq val 
    1 1 Insert XX 
    4 2 Insert YX 
    2 3 Delete YY 
    3 4 Insert XY 
+0

감사합니다. 나는 처음 것 인 것처럼 이것을 받아 들인다. –

3

DB에서 결코 확신 할 수없는 한 가지 방법은 행 순서입니다.

insert *A* into myTable ... 
insert *B* into myTable ... 

을 다음

select * from myTable 

당신은 모두 동등하게 유효

A 
B 

또는

B 
A 

으로 끝낼 수 할 : 예를 들어, 당신은 할 경우.귀하의 경우 결과를 주문하는 특정 목적을 가진 열을 추가 할 수 있습니다. 나는 일반적으로 정수를 사용하고 displayOrder라고 부른다. 이것의

하나 개를 사용하면 여러 회사를 선택할 수있는 형태에 displayOrder로 myTable에 순서에서 선택

* : 그래서 내 select 문은 일반적으로처럼 보인다. 상단에 내가 원하는 것은 알파벳 순으로 중간에 있기 때문에 companyName에 의한 주문을 할 수 있습니다. 대신 displayOrder 열을 사용합니다.

희망이 있습니다.

+0

답장을 보내 주셔서 감사합니다. 나는 이안의 첫 번째 것을 받아 들일 것이다. +1 –

1

버전 번호, 명령어 번호 및 시퀀스 번호를 나열하는 다른 테이블은 어떻습니까? 더 복잡해지고 있지만 필요한 버전을 다시 만들 수 있습니다. 또한 주 테이블에서 seq 번호를 다시 작성하지 않아도됩니다.

Table Versions 
    VersionID int, 
    InstructionNum int, 
    SeqNum int 

여기서 VersionID는 일부 버전 식별자 (문자열 일 수도 있음)입니다. InstructionNum은 명령 목록 (이미 가지고있는 명령 목록)을 가리키며 시퀀스 번호는 순서를 지시합니다.

이렇게하면 모든 버전이 아닌 특정 버전에 대한 지침을 얻을 수 있습니다.

+0

감사하지만, 내 requeriments에서 DB에 다른 테이블을 추가하고 싶지 않아요. +1 –

관련 문제