2009-11-09 3 views
0

공개 : 나는 자연스러운 옹호자이며 IDENTITY PK 접근법에 반대합니다. 그러나 나는 삶의 선택에 대한 '살고 살아 간다'접근법을 가지고 있습니다. 따라서 종교적 논쟁은 여기에 없습니다.여러 개의 IDENTITY PK가있는 엔티티를 제작 하시겠습니까?

나는 유일한 키가 IDENTITY PK 컬럼 인 테이블을 상속 받았습니다. ID라고 부르 자. ID를 참조하는 테이블이 여러 개 있습니다. 새 엔터티를 만들려는 의도 된 프로세스는 다음과 같습니다.

  1. INSERT INTO
  2. scope_identity를 사용하여 자동 생성 ID를 가져옵니다.
  3. 을 관련 테이블에 삽입하려면 자동 생성 ID를 사용하십시오.

실제로 엔티티를 만들고 ID를 반환하는 도우미 저장 프로 시저가 있습니다. 그러나 두 가지 문제가 있습니다 :

도우미가 proc에 저장 한 것보다 더 많은 정보를 필요로하고 관련 테이블에 IDENTITY PK가있는 행을 만들어야하므로 각 엔티티에 대해 여러 자동 생성 값을 가져와야합니다. 방법. 수백 개의 엔티티를 조작해야하며 헬퍼 procs는 한 번에 하나의 엔티티를 처리하도록 코딩되어 있습니다.

'IDENTITY PK'디자인을 사용하여 엔티티를 대량 생산하는 가장 좋은 방법은 무엇입니까?

내 자연스러운 키 디자인을 사용할 때 키 값을 미리 생성 할 수 있으므로 외래 키가 예상하는 순서대로 테이블에 일부 스크래치 테이블을로드하는 경우 일뿐입니다. 따라서 IDENTIY 열의 유형과 일치하는 높은 값의 INTEGER 값 시퀀스를 찾고 싶습니다. 지금은 사용되지 않고 시간이 올 때 사용되지 않을 것이라는 희망이 있습니다. INSERT. 이것은 좋은 생각입니까?

답변

0

MS SQL Server에 대해 특별히 이야기하고 있습니까?

IDENTITY 열이 기본적으로 명시 적 삽입을 허용하지 않는 것은 유감입니다. 다른 DBMS에서는 자동 증가 기능이 있어도 해당 열에 명시 적 값을 삽입하는 것을 막을 수는 없으므로 사전에 키를 쉽게 선택할 수 있습니다. 불행히도 SQL Server에 대해 걱정할 SET IDENTITY_INSERT이라는 불편 함이 있습니다.

엔터티를 만들고 ID를 반환하는 도우미 저장 프로 시저가 있습니다.

일반적으로 SCOPE_IDENTITY()을 선택하는 것만 큼 간단하기 때문에 sproc을 사용하는 것이 나에게 조금 지나치게 보입니다. 매우 자주 삽입 삽입물을 작성하여 명시 적 선택을 피할 수 있으므로 마지막 삽입물의 SCOPE_IDENTITY()를 직접 사용할 수 있습니다.

이제는 사용되지 않고 있으며 사용되지 않을 것이라는 것을 알고있는 높은 가치의 정수 값의 시퀀스를 찾습니다 [...] 이것이 좋은 생각입니까?

반드시 높은 값일 필요는 없습니다. 사실 그렇게했다면 IDENTITY 값에 많은 격차가 생길 수 있습니다. 이는 일반적으로 더 잘 피할 수 있습니다. 다른 사람이 그 시간에 그 값을 사용했거나 더 나은 방법으로 select-max를 실행 한 다음 트랜잭션에 삽입 할 때 오류가 발생하는 한 MAX(column)+1 값을 사용할 수도 있습니다.

+0

답장을 보내 주셔서 감사합니다. 예, SQL Server. 내가 SCOPE_IDENTITY()를 사용할 수없는 이유는 한 번에 하나씩이 아니라 build (100 개의 행을 포함)를 삽입하려고하기 때문입니다. 그래서 select-max then insert는 작동하지만 어떻게 내 100 개의 레코드와 다른 누구를 위해 생성 된 값을 찾을 수 있습니까? –

+0

100 개의 행이 많지는 않습니다. 스크립트 루프를 통해 하나씩 쉽게 반복 할 수 있으며 여전히 상당한 시간이 걸리지 않습니다. 또는 select-max를 사용하여 첫 번째 빈 행을 가져온 다음 ID 값을 가진 행을 다음 연속 블록에 삽입합니다.이 경우 IDENTITY_INSERT를 사용하여 첫 번째 테이블의 100 개 행을 INSERT하면 *, * IDENTITY_INSERT로 다음 텍스트에 100 개의 해당 행을 삽입하십시오. 한 번에 하나의 테이블에서만 설정할 수 있기 때문에. – bobince

관련 문제