최선의 방법은 무엇일 항목에 대한 변경 사항을 저장하려면 데이터베이스 기록을 필요로 하는 승인되기 전에 표시?

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

  •  01-07-2019
  •  | 
  •  

문제

나를 저장할 필요가 사용자가 입력한 변화를 특정 테이블,하지만하여 그 변경 내용까지 그들이 볼 수 있고 승인된 관리는 사용자.그 동안 변화에서 여전히 보류중인 상태,난 여전히 표시하는 오래된 버전의 데이터입니다.무엇을 할 수있는 가장 좋은 방법이 될 것이 이러한 변경 사항을 저장하는 승인을 기다리고?

나는 여러 가지 방법을 생각했지만,무엇을 알아낼 수 있습니 최선의 방법입니다.이것은 아주 작은 웹 응용 프로그램입니다.방법 중 하나는 것을 PendingChanges 테이블을 모방하는 기타 테이블의 스키마 다음 한 번의 변경을 승인할 수 있었습 업데이트 실제 테이블이 있습니다.다른 방법이 될 것입하는 몇 가지 종류의 레코드 버전 관리가 나는 저의 여러 버전 테이블에서 데이터는 다음 항상 당기 기록과 함께 가장 높은 버전 번호를 표시된 승인됩니다.는 것의 수를 제한 추가 테이블(해야 할 여러 테이블)지만,필요한 것이 나을 추가 처리마 레코드 집합을 확실히 받기 위해서는 바로 사람입니다.

는 모든 개인적인 경험을 가진 이러한 방법이나 다른 사람할 수 있는 좋은?

업데이트:다만 명백하게 하는 것은,특정 상황에서 나는 관심이 없다 그래서 많은 역사적인 데이터입니다.나는 그냥 몇 가지 방법이 필요 승인의 모든 변경 내용은 사용자에 의해하기 전에 그들은 그 사이트에서 실행.그래서,사용자가 자신의 편집"profile"면 관리자는 것입니다에서 보는 변경을 승인합니다.승인 후이 될 것이다 표시된 값과 오래된 버전이 필요하지 않을 수 있습니다.

사람을 시도하고 아래의 솔루션을 저장하는 곳 중인 변화에서 모든 테이블을 필요로 하는 그들을 추적하 XML 에서 특별한 PendingChanges 테이블?각각의 레코드가 있는 열을 말하는 테이블이 변경되었을 위해 열이는 어쩌면 저장된 id 를 기록하는 것이 변경 될(null 인 경우 새로운 기록),날짜/시간 열을 저장하는 경우는 변경되었다,그리고 열을 저장하는 xml 의 변경의 기록(수 있는 어쩌면 직렬화 데이터 object).이후 나는 필요하지 않 역사,후에 변경을 승인하고,실제 테이블이 될 것입 업데이트 및 PendingChange 기록을 삭제될 수 있습니다.

에 대해 어떤 생각을 하는 방법?

도움이 되었습니까?

해결책

크기입니다.를 처리할 경우 많은 데이터와 큰 숫자의 행,다음의 역사적인 혼합으로 현재의 망치는 것입니다 당신.당신은 또한 문제에 가입하는 경우 다른 데이터를 확인하고 함께 당신의 권리의 행이 있습니다.

필요하신 경우에는 기록 데이터를 저장하여 시간에 따라 변화하고 별도의 역사,테이블 라이브 업데이트,실제 데이터의 일단을 승인했다.그것은 단지 모든 주위에 청소기입니다.

이 많은 경우의 데이터 형식이 있는 이 메커니즘하지만 유지해야 역사적 기록,내가 제안하는 것이 일반적인 큐 표에 대한 검토를 보류 중인 품목,말로 저장된 xml.이 허용하는 단 하나의 테이블을 읽을 수 있에 의해 관리자 및 사용하여 다음을 추가할 수 있습니다 이 기능을 모든 테이블에서 당신 시스템은 매우 쉽습니다.

다른 팁

확실히 그들을 저장에 주요 테이블을 열지 여부를 나타내는 데이터가 승인하거나지 않습니다.

가의 승인 없이 복사가 필요합니다.추가 작업 필터링 승인되지 않은 데이터는 종류의 것은 데이터베이스는 할 때,당신은 그것에 대해 생각합니다.인덱싱하는 경우의 승인 열,그것은 너무 부담을 하는 것입니다.

작업에서 은행 도메인과 우리는 이 필요한 변경 사항 중 하나에 의해 수행해야하는 사용자에만 반영된 후의 승인다.디자인 우리가 사용하는 것은 아래와 같이

  1. 주요 테이블
  2. 다른 테이블 B 저장하는 변경된 레코드(그래서 정확히 비슷한 첫 번째)+2 추가 열(는 FKey C 고 코드를 나타내는 종류의 변경)
  3. 세 번째 표 C 을 저장하는 모든 그러한 기록이 필요 승인
  4. 네 번째 table D 저장하는 역사(아마 당신은 필요가 없이).

이 접근 방식이다.그것은 모든 시나리오를 업데이트를 포함하여 삭제 매우 정상적입니다.

주 SOx 준수는 운동이었 밀의 얼굴에서 대부분의 공개적으로 거래되는 기업,나는 꽤의 경험은 지역에 있습니다.일반적으로 사용하고있는 별도의 테이블과 함께 시간 스탬프 중 변경 내용과 어떤 종류의 열입니다.의 담당자 관리의 이 데이터 목록 보류 중인 변화와 선택할 수 있습을 동의에 동의합니다.할 때 조각의 데이터가 허용,내가 사용하거을 통합하는 새로운 데이터이다.하지만 어떤 사람들은 좋아하지 않 트리거 방법 그리고 오히려드이로 저장되었습니다.이것은 잘 나를 위해 심지어에서 오히려 큰 데이터베이스가 있습니다.복잡성을 얻을 수 있는 작은 처리하기 어려운,특히 다루는 상황을 하나의 변화에 직접 충돌하는 또 다른 변화하고 어떤 순서로 이러한 프로세스의 변화.테이블을 들고 요청할 수 있는 데이터 없이 삭제될 수 있기 때문에 그것을 보유하고"빵 부스러기를"이렇게 말하는 경우에는 필요한이 있을 추적하는 필요시에서 무슨 일이 있었는 특정 상황이다.그러나 어떤 방식,위험 평가 될 필요가 등급으로 충돌하는 데이터,비즈니스 로직 레이어야하는 장소에서 결정하는 프로세스에 이러한 상황입니다.

나 개인적으로 좋아하지 않는 동일한 방법이기 때문에,경우의 데이터를 저장하는 지속적으로 변경되고,이에 추가 데이터 수 있습니다 테이블이 불필요하게 다운 늪에서 요청을 표하고,필요한 더 많은 세부 사항을 어떻게 당신을 인덱스 테이블과 실행 계획입니다.

나는 테이블을 만들과 함께하는 플래그를 만들기 같은

 CREATE OR REPLACE VIEW AS 

  SELECT * FROM my_table where approved = 1

하는 데 도움이 될 수 있습니다 별도의 간의 종속성 aprovement 및 쿼리를 처리합니다.수도 있지만하지 않고 최상의 아이디어 필요한 경우 업데이트를 수행할 수 있습니다.

이동을 기록할 수 있는 몇 가지 성과 고려 사항입니다.그러나 파티션된 테이블을 할 수있는 무언가가 매우 유사하다.

이 웹 응용 프로그램입니다 나는 가정이 더 읽기 쓰기보다,그리고 당신이 원하는 무언가를 합리적으로 빠르고,귀하의 분쟁해결(i.e 의 주문 승인)결과 같은 행동--최근 업데이트를 하는 것이 사용됩니다.

모두 전략의 제안과 유사에서 그들을 모두 잡아당 하나의 행 변경 설정,거래 등등의 충돌,유일한 차이점을 저장할지 여부를 한 테이블에서 데이 또는 두 가지입니다.주어진 시나리오는 두 개의 테이블을 것 같은 더 나은 솔루션을 위한 성능을 이유입니다.당신은 또한 해결에 이것은 하나 테이블과의 가장 최근 승인되는 경우는 변경 데이터베이스를 지원합니다.

그러나 또 다른 아이디어를 하는 것이 세 가지 테이블이 있습니다.

  • 하나는 것은 기본 테이블의 원본 데이터입니다.
  • 두 번째게 될 것이라고 제안된 데이터입니다.
  • 세 번째게 될 것이라고 역사적인 데이터입니다.

이 방법은 신속하고 쉽게 목록을 다시고 또한 당신에게 감사해야 하는 경우습니다.

내가 생각하는 두 번째 방법은 더 나은 방법이 간단하기 때문에,그것은 더 나은 여러 테이블이 있습니다.또한,여분의 처리가 될 것으로 최소 인덱스를 만들 수 있습을 기반으로 테이블에'승인'비트,그리고 당신은 전문할 수 있는 쿼리를 하거나 풀 승인(보기)또는 승인되지 않은(승인)항목이 있습니다.

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