먼저 상태 열이 테이블의 레코드 (행)로 표시되는 실제 항목 의 상태를 반영 하지 않는다는 것을 명확히 해야합니다. 오히려 레코드 자체의 상태를 표시하기위한 것입니다.
승인 / 삭제 / 잠금 / 보류 / 거부 등과 같이 활성 / 비활성 또는 복잡성만큼 간단 할 수 있습니다. 상태는 부울 / 짧은 정수 열 또는 단일 문자 열에 저장 될 수 있으며, true
/ 1
= 활성 또는 A
= 승인되었습니다.
기본 아이디어는 응용 프로그램에서 휴지통 / 휴지통과 같은 복구를 지원하고 데이터베이스에서이를 시뮬레이션하는 것입니다. 사용자가 레코드를 "삭제"할 수있는 프런트 엔드 GUI 또는 기타 인터페이스가있는 경우 실제로 테이블에서 레코드를 삭제하는 것이 아니라 단순히 레코드 상태를 비활성 또는 삭제됨으로 변경합니다. 인터페이스가 레코드를 가져올 때 항상 상태가 활성 또는 승인 된 조건과 일치하는 레코드 만 가져옵니다.
사용자가 실수하여 "삭제 된"레코드 (사용자 관점에서)를 복구해야하는 경우 DBA는 레코드를 활성 또는 승인 상태로 쉽게 패치 할 수 있습니다. 이는 백업을 검색하고 원본 레코드를 찾는 것보다 낫습니다. 그곳에. 또는 인터페이스 자체는 사용자가 삭제 된 레코드를 별도의보기로보고 필요에 따라 복원하거나 영구적으로 삭제할 수도 있습니다 (실제 레코드 삭제).
내 질문 :
- 이것은 좋은 습관입니까, 아니면 나쁜 습관입니까?
- 데이터 정규화에 영향을 줍니까?
- 잠재적 인 함정은 무엇입니까?
- 동일한 목표를 달성하는 다른 방법이 있습니까? (참고 참조)
- 데이터베이스가 특정 상태에 대해서만 데이터에 대해 고유 한 제약 조건을 적용하도록하려면 어떻게해야합니까 (그러나 다른 상태에 대해서는 중복을 허용하지 않습니까)?
- 데이터베이스가 기본적으로 "휴지통"과 같은 기능이나 테이블 추적 / 복구 기능을 제공하지 않아서 인터페이스가 실제 레코드를 걱정없이 삭제할 수있게하는 이유는 무엇입니까?
참고 : 별도의 기록 테이블을 유지 관리하는 방법에 대해 읽었지만 스토리지 측면에서 더 나빠 보이고 트리거를 생성하고 추적 된 테이블의 스키마로 트리거를 최신 상태로 유지해야합니다.