2010-02-02 3 views
0

상당히 복잡한 데이터 캡처 및 관리 사이트와 관련된 잠재적 인 작업을보고 있으며 최선의 접근 방법이 궁금합니다. 나는 램프 아키텍처를 사용할 것이다.데이터 캡처 관리 시스템에 대한 조언

백엔드가 포함됩니다 : 사용자가 업로드 한 csv 파일을 통해

대량 사용자 생성 - 그래서이 부분에 대한 확신하기 전에이 작업을 완료했다.

등록되면 사용자는 기밀 정보를 정기적으로 제출합니다. 데이터는 기밀 사항이지만 정기적으로 백업하는 MySQL 데이터베이스에이 데이터를 저장하기 만하면됩니다.

  • 관리자, 사용자 활동을 모니터링하고 필요한 경우 새로운 역할과 사용자 계정을 만들 것입니다 :

    관련된 다른 역할이있을 것입니다.

  • 최종 사용자 - 단순히 자신의 프로필을 편집 할 수있는 기능, 형태를 통해 정보를 제공 할 것입니다, 이전 제출하고

  • 관리 사용자와 같은 다른 기본적인 물건을 볼 수 - 누가 전 시리즈를 실행할 수 있습니다 데이터에 대해 정의 된 보고서를 작성하고 브라우저에서이 정보를 표시합니다. 선택한 결과를 스프레드 시트로 추출 할뿐만 아니라 데이터에서 "자유 ​​형식 쿼리"를 수행 할 수도 있습니다. 이러한 표준 보고서는 웹 서비스/피드로도 제공됩니다. 자유 형식 쿼리 부분은
    입니다. 데이터가 실제로 무엇인지 아직 모르기 때문에 새로운 질문이 시간이 지남에 따라 데이터 캡처 양식에 동적으로 추가 될 가능성이 큽니다. 이를 수용하기 위해서는 데이터베이스 구조가 유연해야하며, 이전에 해 본 적이없는 자유 형식 쿼리에이 용량을 제공해야합니다. 누구나 이것에 현명한 접근을 제안 할 수 있습니까?

또한, 버전의 형태가 될 것이다 그래서 사용자 업데이트/특정 데이터를 개정하는 경우, 변경 추적 할 것이며 이전 기록 (들)을 계속 사용할 수있을 것이라고. 나는 데이터베이스 설계에 이것을 통합하여 데이터베이스의 데이터를 업데이트하고 겹쳐 쓰는 대신 새로운 레코드가 항상 생성되고 "덮어 쓴"레코드는 단순히 아카이브 된 것으로 표시됩니다. 이렇게하면 항상 라이브 데이터 행과 아카이브 된 행 (날짜순으로 정리)을 검색 할 수 있다고 생각합니다. 말이 돼?

미리 알려 주셔서 감사합니다. 이것은 이전에 작업 한 것 (주로 표준 CMS)보다 조금 복잡합니다. 위의 처리 방법을 알고 있지만 조언이 필요한 경우 더 감사하게 생각합니다. 숙련 된 개발자가 제공 할 수 있습니다.

답변

1

버전 관리 시스템을 사용하려는 경우보기를 생성하여 활성화 된 모든 레코드를 가져오고 사용자 인터페이스가 항상보기를 사용하도록 권장합니다 (변경 사항을 볼 때를 제외하고) 직접 액세스하지 않는 것이 좋습니다 그 테이블. 또한 하나의 레코드가 활성화되어 있는지 확인하기 위해 테이블에 트리거를 넣을 것입니다. 그런 다음 PK/FK 관계에있는 레코드를 식별하는 고유 키와 키의 문제가 있습니다 (다른 레코드를 추가 할 때마다이를 변경하지 않아도 됨).

변경 사항을 조사해야하는 경우 이전 데이터로 돌아 가야하는 경우 감사 테이블을 설정할 수도 있습니다.기록을 자주 확인해야하는 경우 감사 테이블은 일반적으로 이전 레코드 및 새 레코드, 전체 레코드 구조, 열 이름 및 변경 사항이 작성된시기와 같은 일부 메타 데이터가 없기 때문에 쿼리하기가 어려울 수 있습니다.

아마도 약간의 추가 열이있는 orgional 테이블과 같은 히스토리 테이블을 가질 수 있습니다 (변경 사항이 작성된 시점과 새로운 대리 키를 입력 한 경우). 원래 번호 매기기와 고유 인덱스를 가져 와서 PK. 그런 다음 활성 레코드가 모두 하나의 테이블에 있고 비활성 레코드가 다른 테이블 (트리거로 채워짐)에 있으며 두 데이터 세트를 함께보고 싶을 때만보기를 사용합니다.

이 키의 핵심은 트리거를 사용하여 저장하려는 모든 위치에 기록을 채우는 것입니다. 데이터 베 이스는 사용자 응용 프로그램의 영향을받는 것이 아니므로 사용자 인터페이스에서 수행 한 변경 사항뿐 아니라 기록 변경 사항도 모두 기록해야합니다. 나는 모든 데이터베이스에 대해 말할 수는 없지만 SQl 서버에서 트리거는 데이터의 각 배치에 대해 한 번씩 작동합니다. 한 쿼리에서 누군가가 가격을 업데이트하면 한 번에 하나의 레코드를 작동한다고 가정하고 쓰지 마십시오. 일반적으로 세트 기반 방식으로 트리거를 작성하는 것이 중요합니다. 레코드를 반복하는 것은 느리며 방아쇠를 당기면 전체 시스템이 중단 될 수 있습니다. 단, 10 %의 가격 상승을 기록한 백만 건의 레코드를 반복합니다.

+0

답장을 보내 주셔서 감사합니다. 나는 트리거를 지원하는 MySQL 5를 사용할 것입니다. 트리거를 사용하지는 않았지만이 애플리케이션에서는 데이터 변경을 처리하는 좋은 방법 인 것처럼 보입니다. 내가 올바르게 이해한다면, 내 경우에는 방아쇠가 레코드에 대한 UPDATE에서 활성화 될 가능성이 높습니다. db 끝에서만 독점적으로 db 이벤트 체인을 처리하므로 PHP 응용 프로그램 코드가 이러한 이벤트를 처리 할 수 ​​없게됩니다. 또한, 감사 테이블의 개념은 로깅 날짜 등을위한 추가 열과 함께 합리적으로 들립니다. – kenny99