작업 단위 - 웹 팜의 임시 개체 저장소에 대한 가장 좋은 접근 방식은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1521349

  •  19-09-2019
  •  | 
  •  

문제

저는 Martin Fowler가 "작업 단위" 패턴이라고 부르는 것과 유사한 것을 디자인하고 구현해야 합니다.다른 사람들이 이를 "장바구니" 패턴이라고 부르는 것을 들었지만 요구 사항이 동일하다고 확신하지는 않습니다.

구체적인 문제는 사용자(및 우리 UI 팀)가 상위 개체가 생성되기 전에 하위 개체(데이터베이스의 참조 무결성 제약 조건을 사용하여)를 만들고 할당할 수 있기를 원한다는 것입니다.저는 오늘 다른 디자이너를 만났고 두 가지 대안적인 접근 방식을 생각해 냈습니다.

a) 먼저 데이터베이스에 더미 상위 개체를 만든 다음 더미 하위 개체와 더미 할당을 만듭니다.데이터베이스에서 양과 염소를 구별하기 위해 음수 키(일반 키는 모두 양수임)를 사용할 수 있습니다.그런 다음 사용자가 전체 트랜잭션을 제출하면 데이터를 업데이트하고 실제 키를 추가하고 정렬해야 합니다.

나는 이것에 몇 가지 단점을 본다.

  • 이는 인덱스에 혼란을 야기합니다.
  • 우리는 여전히 고유 제약 조건이 있는 열에 대한 고유 제약 조건을 충족할 수 있는 방법을 찾아야 합니다.
  • 많은 WHERE 절에 또 다른 조건자를 추가하려면 기존 SQL과 SQL을 생성하는 코드를 많이 수정해야 합니다.
  • Oracle에서 기본 키를 변경할 수 있지만 이는 어려운 일입니다.

b) 이러한 역방향 트랜잭션에 참여할 수 있어야 하는 개체 및 할당에 대한 임시 테이블을 만듭니다.사용자가 제출을 누르면 실제 항목이 생성되고 이전 항목이 제거됩니다.

나는 이것이 첫 번째 대안보다 더 깨끗하다고 ​​생각하지만 여전히 데이터베이스 활동 수준이 증가합니다.

두 방법 모두 사용자가 요청 제출 또는 취소를 실행하기 전에 세션이 손실된 경우 임시 데이터를 만료할 수 있는 방법이 필요합니다.

이 문제를 다른 방법으로 해결한 사람이 있나요?

도움을 주셔서 미리 감사드립니다.

도움이 되었습니까?

해결책

트랜잭션이 커밋되기 전에 데이터베이스에 이러한 개체를 생성해야 하는 이유를 이해할 수 없으므로 솔루션을 진행하기 전에 UI 팀에 명확히 설명하는 것이 좋습니다.그들이 원하는 것은 사용자가 이전에 다른 페이지에 저장한 정보를 읽는 것뿐이라는 것을 알 수 있습니다.

따라서 커밋 전에 개체를 데이터베이스에 저장할 필요가 없다고 가정하고 계획 C를 제공합니다.

세션에 초기화된 비즈니스 개체를 저장합니다.그런 다음 원하는 모든 하위 항목을 생성하고 트랜잭션을 커밋해야 할 때만 데이터베이스를 건드리고 참조를 설정할 수 있습니다.세션 데이터가 커질 경우(개별적으로 또는 집합적으로) 세션 정보를 데이터베이스에 저장하십시오(이미 수행하고 있을 수도 있음).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top