문제

내 응용 프로그램에는 여러 엔티티 클래스, 사용자, 고객, 게시물 등이 있습니다.

데이터베이스를 설계하려고하며 엔티티가 생성되고 업데이트 된 날짜를 저장하고 싶습니다. 이것은 까다로운 곳입니다. 확실히 하나의 옵션은 각 엔티티 테이블에 대해 create_timestamp 및 update_timestamp 열을 추가하는 것입니다.

또 다른 가능성은이 정보를 저장하는 로그 테이블을 만들 수 있으며 어느 실재.

이견있는 사람? 나는 후자를 구현하는 것에 기대고있다.

도움이 되었습니까?

해결책

단일 로그 테이블 테이블 접근 방식에는 다음과 같은 두 가지 주요 문제가 있습니다.

  1. 로그 테이블의 디자인은 아마도 다른 모든 테이블의 디자인을 제한 할 것입니다. 로그 테이블에는 TableName이라는 열 하나가 있고 PkValue라는 열이라는 열이있을 가능성이 높습니다 (로깅 레코드의 기본 키 값을 저장 함). 일부 테이블에 복합 기본 키 (예 : 둘 이상의 열)가있는 경우 로그 테이블의 설계는이를 설명해야합니다 (아마도 pkvalue1, pkvalue2 등과 같은 열이있을 수 있습니다).
  2. 이것이 일종의 웹 애플리케이션 인 경우, 트리거에서 사용할 수있는 사용자 ID는 웹 앱 사용자의 ID 대신 응용 프로그램의 계정이됩니다 (생성물에 실제로 저장하려는 것일 가능성이 높습니다. 필드). 이것은 웹 앱 코드로 만든 레코드와 달리 생성 된 레코드를 구별하는 데 도움이됩니다.

작성된 Date 및 ModifiedDate 열은 각 테이블에 정의되어 있기 때문에 중복되지 않습니다. 나는 그 접근법을 고수하고 각 테이블에 삽입 및 업데이트 트리거를 넣어 해당 열을 채 웁니다. 변경을 한 최종 사용자를 녹음해야한다면 트리거를 건너 뛰고 응용 프로그램 코드에서 타임 스탬프와 사용자 필드를 채 웁니다.

다른 팁

나는 "로그"또는 "이벤트"테이블로 후자를한다. 내 경험에 따르면, "업데이트 된"타임 스탬프는 최신 업데이트 시간뿐만 아니라 원하는 곳에서 많은 시간을 찾기 때문에 매우 실망 스럽습니다.

프레젠테이션 레이어에 생성 된/업데이트 된 타임 스탬프를 얼마나 자주 포함시켜야합니까? 대답이 "한 번 위대한 위대한 곳"이상의 것이라면 각 테이블에 그 열을두면 더 나은 서비스를받을 것이라고 생각합니다.

몇 년 전에 작업 한 프로젝트에서, 우리는 감사 테이블이라는 것을 업데이트 한 트리거를 구현했습니다 (변경 사항에 대한 기본 정보, 테이블 당 하나의 감사 테이블). 여기에는 수정 날짜가 포함되었습니다 (및 마지막 수정).

키 테이블에만 적용되었습니다 (조인 또는 참조 데이터 테이블이 아님).

이것은 마지막으로 만들어진 마지막 수정 된 필드를 설명해야한다는 정상적인 좌절감을 제거했지만 트리거를 최신 상태로 유지하는 성가심을 도입했습니다.

결국 트리거/감사 테이블 디자인이 잘 작동했으며 우리가 기억해야 할 것은 ETL (!) 전에 트리거를 제거하고 다시 신청하는 것입니다.

제가 작업하는 웹 기반 CMS 용입니다. 생성 및 마지막 업데이트 날짜는 대부분의 페이지에 표시되며 마지막으로 만든 (및 업데이트 된) 페이지에 대한 목록이 있습니다. 관리자 인터페이스 도이 정보를 사용합니다.

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