2012-03-29 6 views
0

소프트 삭제를 피하기 위해 휴지통 데이터베이스를 만들고 있습니다. 기본 데이터베이스는이 데이터베이스에 연결됩니다. 여기에 가능한 두 가지 접합 접근법의 예가 있습니다. 어떤 입력이 더 효율적인지 기대하고 있었습니까?어떤 DB 접합 접근법이이 시나리오에서 더 효율적입니까?

간단히 말하면 OrderInvoice의 두 테이블이 있고 각 인보이스에는 1 개의 주문 만 있습니다. 휴지통에 이러한 테이블의 접합을 위해

Order 
----- 
OrderId 
InvoiceId 
Description 
Date 
NumberOfStuffOrdered 

Invoice 
------- 
InvoiceId 
Description 
Price 
Tax 
Shipping 

, 내가 걸릴 접근하는 확신 할 수 없었다.

접근 1 :

DeletedOrder 
------------ 
DeletedOrderId 
OrderId 
RecycleBinId 
Date 
Reason 

DeletedInvoice 
-------------- 
DeletedInvoiceId 
InvoiceId 
RecycleBinId 
Date 
Reason 

접근법 2 :

DeletedRecords 
-------------- 
DeletedRecordsId 
RecordPrimaryKeyId 
RecycleBinId 
RecordType 
Date 
Reason 

데이터베이스에 더 테이블 공간을 소요됩니다 접근 한, 그것은 테이블 당 더 적은 행이와 빠른 쿼리 시간이되지만 시스템이 성숙합니다. 접근법 2는 데이터베이스의 각 테이블에 대해 추가로 삭제 된 테이블을 만들어야하지만 시스템이 성숙 해지고 쿼리 속도가 느려지면서 통합됩니다.

전반적으로 어느 쪽이 더 효율적일 것입니까, 아니면 더 좋은 방법이 있습니까?

답변

1

유지해야하는 양과 사용 방법에 따라 다릅니다. 송장 및 주문 (NumberOfStuffOrdered, Tax 등)의 모든 세부 사항을 기록해야하는 경우 특정 삭제 테이블이 필요합니다. 행이 한 번 존재했다는 사실 (Id, 유형, 날짜 [Deleted], Reason)을 기록하기 만하면, "it depends"로 되돌아갑니다.

아무도 실제로 데이터를 사용하지 않는다면 언젠가 IRS 감사의 기회를 놓치지 않고 존재해야한다는 사실 만 알면 하나의 테이블로 충분할 것입니다. (비유하자면 70 년 전의 양식 상자로 가득 찬 창고입니다. 시간이 오래 걸릴 것입니다. 그러나 결국에는 찾을 수 있습니다.) 그러나 정기적으로이 데이터에 액세스하고 보고서를 실행하려면 데이터 마이닝 , 또는 무엇이든 상관없이, 정규화 된 스타 스키마 또는 기타 유용한 프로세스를 지원하는 테이블을 설계하는 것이 가장 좋습니다.

일반적으로 좋은 성능이 중요하지 않으면 자주 쿼리를 지원하는 몇 가지 인덱스가있는 큰 테이블로 충분할 것으로 생각됩니다.

+0

답변 해 주셔서 감사합니다. 좋은 성능은 항상 중요합니다! ;) 주로 레코드를 제거해야 할 때 외래 키 관계를 제거하거나 삭제를 삭제하지 않고도 참조 무결성이 유지되도록 데이터를 유지하려고합니다. 또한 성능에 영향을주지 않고 제거 된 레코드를 복원 할 수있는 기능을 용이하게합니다. 휴지통에는 계단식 삭제 기능이 있습니다. –

관련 문제