저도 처음에 SQL DB를 쓰면서 많이 혼동했던 부분인데, 제 나름대로 다음과 같이 정리하고 있습니다. 혹시 틀렸으면, 정확하게 알려 주시기 바랍니다.
Interbase (Firebird도 마찬가지겠지만) 를 Delphi 등에서 사용하면 기본적으로 3-tier로 구성된다고 개념적으로 생각해야 논리적으로 맞아집니다.
즉, 아래 그림의 C 에서 요청이 있으면, 처음에는 A,B,C의 순으로 데이터가 전달됩니다. 그런 다음 데이터 저장의 경우는 반대로 C, B, A 순으로 저장이 되겠죠. 그런데 저장은 각각 명령이 있어야 합니다.
A. B. C.
Physical DB 서버상의 COPY본? 응용 프로그램의 Client
(HDD 에 있는 파일) --------------> 사용자가 요청한 내용 --------------------> TTable, IBQuery 등
응용프로그램 상의 Copy 본
이 파일을 변경 <-- commit / rollback -- 여기 반영 <-- post ---- DBGrid 등 Visual control 에서 수정
이런 고민을 하게 된 이유는 table 에 입력이나 수정 후 "post" 명령이 있기 때문인데요, Paradox 등 local DB의 경우 post만 실행하면 바로 DB 자체가 수정됩니다. 그런데 ib 의 경우 post 를 하고도 commit 을 하지 않으면 나중에 수정한 데이터가 반영되어 있지 않습니다. 그래서 위와 같이 자체적으로 3-tier 가 형성되는 것으로 생각하고 작업을 합니다.
혹시라도 잘못 이해한 것이 있으면 바로 알려 주시기 바랍니다. 초기에 저와 같은 고생을 하시지 않도록, 제 경험을 알려 드립니다.
아 그리고 commit 이나 rollback을 하더라도 오픈되어 있는데이터셋이 닫히지 않게 하는 건, commitretaining / rollbackretaining 이라는 명령이 있는데, 많이 써 보진 않아서 아래 경우에 어떻게 적용할지는 테스트를 해 봐야 알 듯 합니다. 누가 해 보시고 알려 주시길... ^^ 지금 당장은 이 쪽에 집중할 수 없는 처지라.
|
좋은 글 감사합니다~