2009-11-23 4 views
6

나는데이터베이스에서 삭제하는 방법?

  • 는이 isActive처럼 영원히
  • 사용을 플래그를 삭제 데이터베이스 테이블에서 데이터를 삭제하는 방법은 두 가지를 알고 /으로 isDeleted

지금이 isActive의 문제는 내가 추적해야한다는 것입니다 어디에서나 SQL 쿼리에서 레코드가 활성 상태인지 아닌지를 확인합니다. 그러나 DELETE를 사용하면 데이터를 영원히 없앨 수 있습니다.

이 데이터를 백업하는 가장 좋은 방법은 무엇입니까?

데이터베이스에 여러 개의 테이블이 있다고 가정하면 모든 것을 백업하고 다른 테이블 (XML에서 아마?)에 저장하거나 다른 방법으로 사용하는 공통 기능이 있어야합니까?

저는 MySQL을 사용하고 있지만 다른 DB에서 사용되는 기술에 대해서도 궁금합니다.

+2

당신이 사용하는 DB 소프트웨어를 알려주는 사람들이 코드 스 니펫을 제공 할만큼 충분히 유용 할 수 있습니다. – tloach

+0

MySQL 사용하기. 다른 사람들이 아닌가? : P – Abhinav

답변

13

비활성 항목을 숨기는보기로 표를 바꿉니다.

또는 행을 아카이브 테이블에 백업하는 트리거를 DELETE에 작성하십시오.

0

당신은 DELETED 열 테이블을 분할하고 조건을 포함 할 뷰를 정의 할 수 있습니다 :

… AND deleted = 0 

이 그냥 간단하고 효율적인 활성 데이터에 쿼리를 만들 것입니다.

+0

abhinav는 행을 삭제하려고합니다 ... 그래서 수평 분할이 필요합니다. – reinierpost

+0

보기를 분할하고 사용하면 ('SQL Server' 및'Oracle'에서) 테이블에서 행이 물리적으로 삭제 된 것처럼 쿼리가 정확하게 작동합니다. 삭제 된 (또는 집계 된) 데이터로 작업하기 위해 테이블에 대해 간단한 쿼리를 직접 작성할 수 있습니다. – Quassnoi

2

레코드 삭제시 발생하는 트리거를 사용하여 일종의 묘지 테이블에 백업 할 수 있습니다.

0

SqlServer를 사용하는 경우 트리거를 사용하면 레코드를 삭제 된 테이블로 이동할 수 있습니다.

+1

SQL Server는 트리거 기능이있는 유일한 데이터베이스는 아니지만 Abhinav가 트리거를 지원하는 RDBMS를 사용하는지 확인하는 데 도움이됩니다. 내가 생각할 수있는 다른 것들은 MySQL, Oracle, Progress OpenEdge 등입니다. – ssakl

+0

나는 4.1.25를 가지고있다. 이게 거기에서 작동할까요? – Abhinav

+0

해당 버전에 트리거가있는 경우 그렇습니다. 죄송합니다, 나는 SQL Server를 사용하므로 사용중인 버전이 확실하지 않습니다. –

2

isDeleted 열을 사용하고 isDeleted를 제외한 모든 열을 isDeleted = false 조건으로 선택하는보기는 사용할 수 있습니다. 그런 다음 모든 양돈장을보기만으로 작업하십시오. 예를 들어 사용자 -

1

당신은 역사 테이블을 다시 위 기록과 타임 스탬프 데이터가이 관계에 필요한 될 수 있다는 것이다 삭제 하지에 대한 가장 큰 이유 중

1

하나를 유지 할 수 이전 고객을 데이터베이스에서 삭제하려고 결정할 수도 있지만 이전 인보이스 (수명이 훨씬 길어질 수 있음)가 참조하므로 고객 레코드가 필요합니다.

이것을 바탕으로 가장 좋은 해결책은 종종보기와 결합 된 "IsDeleted"유형의 열입니다 (Quassnoi는 보이지 않는 많은 데이터로 인해 발생할 수있는 성능 문제를 해결할 수있는 분할을 언급했습니다).

관련 문제