2011-01-12 2 views
0

두 개의 일대 다 관계가있는 데이터베이스 구조가 있습니다. 나는 많은 과목을 가지고있는 웹 사이트를 가지고 있는데, 각각은 많은 질문을 가지고있다. 결과적으로 이러한 유형의 데이터 각각에 대해 세 개의 데이터베이스 테이블이 생성됩니다.일대 다 관계를 유지하면서 준비 테이블에서 실제 테이블로 데이터 이동

내가 수행하는 과정은 준비 사이트를 구현하는 것입니다. 라이브 사이트에 영향을주지 않고이 웹 사이트를 변경할 수있는 곳입니다. 그래서, 중복을 편집하고 변경이 준비되면 라이브 버전의 변경 사항을 푸시하는 의도로 테이블 구조를 복제했습니다. 하나의 저장 프로 시저에서이 푸시를 수행하려고하지만 주제와 질문 사이의 관계를 유지하는 방법을 파악할 수 없습니다.

웹 사이트에는 ID 이외의 식별 기능이 있으므로 사이트의 라이브 버전을 찾고 정보를 업데이트하고 해당 웹 사이트의 주체를 준비 테이블에서 라이브 테이블로 전송하기까지 쉽습니다. 주제 및 질문에 따라서, 삭제하고 다시 삽입이 최선을 보인다 (편집중인 이외에, 추가 또는 제거 할 수있다

-- pass in the ID of the staging website 
-- get the ID of the live website 
-- update live website data from staging website data 
    -- this is a strict update - if there is a staging version, there will necessarily be a live version 
-- delete all live subjects 
-- delete all live questions 
-- copy subjects from staging to live 
-- copy questions from staging to live 

참고 : 여기에

내 계획은 추진을 위해 무엇인지에 대한 몇 가지 의사입니다 행동의).

비교적 간단하기 때문에 대부분의 경우 실제 코드를 작성할 수있었습니다. 그러나 주제와 질문 사이의 관계를 유지하는 방법을 찾는 것은 문제가되었습니다.

for each subject 
    copy information from staging subject to live subject 
    get id of new live subject 
    for each question in this subject 
     copy information from staging to live, setting subject ID to new live ID 

내가 말했듯이, 나는 모두 같은 저장 프로 시저에서이 작업을 계속하고 싶습니다 : 나는 서버 측 스크립트 언어로이 일을한다면, 내가 (다시, 의사) 같은 것을 할 것입니다. 이것이 가능하지 않다면, 분명히 위의 버전으로 갈 것이지만, 효율성을 위해서, 나는 몇몇 데이터베이스 히트를 가지지 않을 것이다.

답변

1

각 행에 대해 새 ID를 만들 필요는 없습니다. 스테이징에서 신원을 재사용 할 수 있습니다.

는 당신이 연결된 서버가 설정 한 가정하면, 당신은 할 수 물론

SET IDENTITY_INSERT MYTABLENAME ON 

INSERT INTO MyTableName (IdenityColumn, Col1, Col2, Col3) 
SELECT StagingIdentityColumn, StagingCol1, StagingCol2, StagingCol3 
FROM StagingServer.StagingDatabase.DBO.MyTableName 

SET IDENTITY_INSERT MyTableName OFF 

, 지금 당신은 당신이 참조 무결성을 그대로 유지할 수 있도록 적절한 순서로 삽입해야 다음과 같습니다.

+0

흥미 롭습니다. 이것은 분명히 가능할 수 있지만, 중복 된 신원에 대한 문호를 개방하지는 않습니까? 또한 삽입 순서와 참조 무결성 사이의 관계에 익숙하지 않습니다. 질문 전에 주제를 삽입하는 것을 말하고 있습니까? 아니면 더 복잡한 것이 있습니까? –

+0

글쎄, 두 시스템에서 현재 사용중인 모든 ID를 제외하고 지금부터는 복제본이 없어야하는 새 데이터를 생산 단계로만 가져옵니다. 다음은 현재 ID 값을 재설정하는 방법입니다. http://msdn.microsoft.com/en-us/library/ms176057.aspx –

+0

"제목"다음에 "질문"이라고 말한 것처럼 들립니다. –

관련 문제