2011-09-03 5 views
2

데이터베이스의 각 테이블에 date_created 및 date_modified 열이 있습니다.응용 프로그램 또는 데이터베이스에서 타임 스탬프 열을 업데이트 하시겠습니까?

MySQL 트리거를 사용하는 데이터베이스에서 타임 스탬프 열을 설정하는 것과 PHP를 사용하여 응용 프로그램 계층에서 설정하는 것이 장점/단점은 무엇입니까?

유지 관리가 쉽고 여러 서버에 배포 할 때 더 나은 시간 동기화가 있습니까?

편집 : 요한은 데이터베이스에 타임 스탬프를 설정하는 것이 좋다고 제안 했으므로 올바른 구현입니까? 또한 모든 테이블에서 date_created 및 date_modified를 사용하는 것이 좋습니다. 또는 특정 테이블에 추가하는 것이 좋습니다? 데이터베이스에서

date_created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 
date_modified TIMESTAMP NOT NULL DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP 
+0

MySQL (매우 "기능"에 대해 모르고 완전히 다른 데이터를 포함하도록 열을 지정했을 때) 행이 업데이트 될 때 테이블의 첫 번째 타임 스탬프 열 값을 덮어 쓰게되므로 데이터베이스에서 직접 값을 가질 수도 있습니다. 트리거가 필요하지 않습니다. – wildpeaks

답변

2

타임 스탬프.

마스터 - 슬레이브 설정에서 복제하면 데이터베이스 타임 스탬프가 올바르게 복제됩니다 (원래 타임 스탬프 사용).

트리거에 타임 스탬프를 설정하지 마십시오 (!).

테이블 정의에 지정하는 대신 MySQL은 자동으로 삽입 및/또는 업데이트시 올바른 타임 스탬프를 설정합니다.
테이블을 만들거나 변경할 때 한 번만 설정하면됩니다.

더 쉬울 수 없습니다.

+0

동의합니다. 환경에 따라 웹 서버와 데이터베이스간에 상당한 시간 차이가있을 수도 있습니다. 일반적으로 일관성을 위해 DB 시간을 사용하려고합니다. – MZB

+0

@MZB, 데이터베이스 복제 시계 왜곡은 DB가 처리하는 해결 된 문제이기 때문에 훨씬 더 그렇습니다. – Johan

+0

"쉽다"는 것이 항상 더 나은 의미는 아닙니다 –

0

어떤 테이블에 타임 스탬프 열이 있어야하는지에 대한 귀하의 재량입니다. 프로덕션 환경에서는 모든 테이블에 이러한 열이 있습니다.

그러나 코드의 값도 설정합니다. 나는 날짜가 응용 프로그램을 완전히 제어 할 수 있도록이 작업이 수행되었다고 생각합니다. 어느 쪽을 선택하든 복제가 괜찮을 것입니다. 응용 프로그램에서 날짜를 설정하고 응용 프로그램 서버 시간 대신 DB 서버 시간이 필요하면 MySQL의 NOW() 함수를 사용하여 열을 설정하기 만하면됩니다.

0

모든 테이블에서 date_created 및 date_modified를 사용하는 것이 좋습니다.

확실히.
나는 또한 date_deleted를 던질 것이다.

응용 프로그램 또는 데이터베이스에서 timestamp 열을 업데이트 하시겠습니까?

이러한 필드의 사용 계획에 따라 다릅니다.
일부 기사에서 마지막 편집 시간을 표시하려면 데이터베이스의 모든 레코드에서 동일한 업데이트 시간과 같은 예기치 않은 결과가 발생하므로 mysql 타임 스탬프 기능을 사용하지 않아야합니다.

트리거와 동일합니다.
게으르지 마십시오.이 필드를 수동으로 설정하십시오. ORM을 사용하여 이미 비용을 지불 할 것입니다. 그렇지 않습니까?

+0

데이터베이스의 모든 레코드에서 동일한 업데이트 시간과 같은 예상치 못한 결과가 발생했습니다. 'update table1 set a = 0 where a = 0'은 실제로 타임 스탬프 업데이트를 트리거하지 않습니다. 왜냐하면 MySQL은 값이 실제로 변경되지 않았 음을 알기에 충분히 똑똑하기 때문입니다. – Johan

관련 문제