2013-01-07 2 views
1

우리 팀은 본질적으로 사내에서 생성 된 ERP 시스템의 인벤토리를 추적해야합니다. 특정 창고에서 특정 품목에 대해 시스템의 재고량에 자주 액세스해야하고 재고를 언제 변경했는지 추적 할 수 있어야합니다.인벤토리 관리 테이블 구조

최초의 생각은 조정 테이블을 가지고 현재의 인벤토리를 볼 때마다 계산 된 것입니다. 우리의 테스트를 통해 우리가 매일 얼마나 많은 시간을 할애했는지를 고려할 때이 계산을하는 것이 너무 비싸다는 것이 분명 해졌다.

우리의 새로운 아이디어는 히스토리가있는 조정 테이블을 갖는 것뿐 아니라 현재 인벤토리가 무엇인지에 관한 테이블을 유지하는 것입니다. 조정이 이루어지면 Google 프로그램은 조정 테이블과 현재 인벤토리 테이블을 동시에 업데이트합니다. 하나의 변경을하기 위해 2 개의 업데이트가 필요하기 때문에이 솔루션을 정말 좋아하지 않습니다. 실패하면 어떻게 될까요? 인벤토리 테이블에있는 내용이 조정 사항에 반영되지 않은 경우 어떻게 조정합니까?

누가 더 좋은 방법이 있습니까?

+1

트랜잭션에서 업데이트를 수행하는 것이 좋으므로 하나의 업데이트가 성공했지만 다른 업데이트가 실패하면 , 둘 다 롤백됩니다. –

+0

또한 하나의 테이블을 삽입 할 때 트리거를 사용할 수 있습니다. 그러면 현재 테이블의 업데이트로 인해 내역에 삽입됩니다. – wishper

+0

프로그램 설계로 인해 두 트랜잭션을 모두 래핑 할 수 없습니다. 한 번에 하나의 테이블 만 업데이트 할 수 있습니다. (바보 같은 디자인 ... 변경 중이지만 시간이 좀 걸릴 것입니다.) – pinguinos

답변

2

단일 트랜잭션에서 필요한 모든 업데이트를 수행 할 수없는 경우 데이터가 올바른지 확인하기 위해 관리 절차 (선언적 제약 조건과 반대)가 필요합니다. 예를 들어, 세부 사항과 합계를 테스트하는 cron 작업을 실행할 수 있습니다. 얼마나 자주하는지는 cron 작업을 실행하는 데 걸리는 시간과 응용 프로그램이 허용 할 수있는 cron 작업의 시간에 따라 다릅니다.

더하기주기 테이블에서 트리거를 선호합니다. 트리거가 각 트랜잭션의 합계를 조정하게하십시오. cron 작업은 누락 된 업데이트가 없는지 확인합니다. (대다수의 dbms는 유지 보수를위한 트리거를 사용하지 못하도록 할 것이므로, 다시 사용하지 않도록 잊어 버렸을 때 cron 작업이 상기시켜줍니다.)