2011-11-05 3 views
2

나는 트리거가 싫다. 나는 그들에 의해 너무 여러 번 길을 걸어왔다. 그러나 행을 업데이트 할 때마다 시간을 지정하는 것이 더 좋을지 또는 트리거를 최소화하여 코드를 유지하도록하는 것이 더 좋은지 알고 싶습니다.행이 업데이트되는 시간을 기록하기 위해 트리거를 사용하는 것이 좋은 생각입니까?

그냥 LastModified

같은라는 열이 것, 트리거에있을 것 테이블을 명확히 내가 저장에 대한 400 데이터베이스를 사용하는 개발자 중 하나입니다입니다 취급하고있어 특정 시나리오 절차. 이 LastModified 열을 가질 약 20 개의 테이블이 있습니다. 이 테이블은 각각 ​​약 10 개의 서로 다른 저장 프로 시저로 업데이트됩니다.

답변

2

트리거가 확실히 큰 문제 일 수 있습니다. 특히 트리거가 여러 개있는 경우 특히 그렇습니다. 디버깅, 성능 조정 및 데이터 로직 이해를 거의 불가능하게 만듭니다.

그러나 디자인을 단일 레이어 (테이블에 대한 트리거)로 유지하고 감사를 위해 soley (예 : 업데이트 된 시간 지정)로 사용하면 큰 문제는 아닐 것이라고 생각합니다. 모든.

마찬가지로 저장 프로 시저를 사용하여 테이블 및 뷰의 액터가되는 경우 스토어드 프로 시저를 사용하는 것이 많은 의미를가집니다 (다시 기억하고 다시 돌아 보는 것이 훨씬 쉽습니다). 현재 날짜 시간 스탬프를 넣으십시오. 나는 그것이 훌륭한 디자인이라고 생각한다.

하지만 임시 쿼리를 사용하고 필드가 not null 인 경우 현재 날짜 시간을 호출하는 것을 잊어 버릴 수 있습니다. 분명히 이것은 스토어드 프로 시저 또는 트리거에 대한 앞의 두 가지 아이디어에 문제가되지 않습니다.

이 상황에서 개인적인 취향이어야한다고 생각합니다. (문자열을으로 만들어 스파게티가되지 않는 한).

2

항상 MySql의 TimeStamp 열을 사용할 수 있습니다. MSSQL이라면 timestamp 열은 DateTime 데이터 형식이 아닌 일련 번호입니다.

일반적으로 전염병과 같은 트리거를 피하고 (커서와 비슷한 수준) 커서를 수동으로 업데이트하면됩니다. 나에게 비즈니스 논리를 강화시키는 데 도움이됩니다. 그러나 사실 "더 나은"것은 개인적인 견해입니다.

1

일반적으로 모든 업데이트에 특정 비즈니스 로직을 적용해야하는 테이블이 있고 다른 소스의 업데이트가있는 경우 트리거가 병목 현상으로 가장 유용합니다.

예를 들어 데이터베이스를 사용하는 php 및 python 응용 프로그램이 있다고 가정합니다. 파이썬 코드를 업데이트 할 때마다 파이썬 코드를 업데이트하려고 시도 할 수 있으며 그 반대의 경우도 가능합니다. 둘 다 동일하게 작동하기를 바랍니다. 또는 트리거를 사용하여 어떤 클라이언트가 연결 되더라도 동일한 작업이 테이블에 수행됩니다.

대부분의 경우 트리거는 나쁜 생각이며 가치가있는 것보다 더 많은 고통을줍니다.

1

디버깅 할 때 일부 트리거가 종종 혼란과 좌절의 원인이 될 수 있습니다. 특히 외부 키 업데이트가 계단식으로 연결되어있는 경우가 많습니다.

하지만 그들은 사용하고 있습니다. 이 경우 400 개의 저장 프로 시저를 업데이트하고 수동으로 날짜를 업데이트 할 수 있습니다. 저장된 procs 중 하나를 놓치면 필드는 쓸모없는 것입니다. 또한 '숨기기'기능을 트리거하는 동안 스토어드 프로 시저에서이를 명시 적으로 갱신하는 것과 동일한 기능을 수행 할 수 있습니다. 새 스토어드 프로 시저를 작성할 때 어떤 일이 생기면 필드를 갱신해야한다고 문서화해야합니다.

개인적으로 중요한 필드가 최신 인 경우 트리거를 사용합니다. INSTEAD OF 트리거를 사용하여 업데이트를 수행하는 대신 트리거를 트리거하는 대신 insert 문을 재정의합니다.

관련 문제