2016-11-10 1 views
2

이미 this 게시물을 읽고 좋은 삭제하지만 전자 상거래 사이트에 대한 최상의 솔루션을 우려하고소프트 삭제하거나 하드 전자 상거래

우리의 시나리오 :

제품 테이블

ProductID Name Price 

주문 세부 정보 테이블

OrderID ProductID 

OrderDetails의 테이블이

제품이 삭제되면 제품 테이블의 제품 ID에 FK 제품 ID를 referrenced있다, 당신은 어떻게 역사적 순서로 보고서를 표시하는 건가요?

옵션 :

소프트 삭제 단점은 - 그것은 dB의 스토리지 성능에게 영향을

하드 삭제 단점 - 좋은 것입니다 보고서를

어떤 도움을 복용하는 동안 필요 추가 쿼리를 가입 할 수 있습니다.

+0

소프트 삭제가 더 좋은 방법입니다. 다른 방법으로, 과거 데이터를 보유하고 원본 테이블에서 하드 데이터를 삭제할 별도의 테이블을 가질 수 있습니다. – Viki888

+0

@ viki888 감사합니다. 그러나 현재 우리는 IsDeleted 및 DeletedDate 필드와 함께 소프트 삭제를 사용할 계획입니다. 앞으로 필요하다면 다른 테이블의 데이터를 하드 삭제 및 보관할 것입니다. – Lishna

답변

0

나는 소프트 삭제로 분명히 갈 것이다. 특히 전자 상거래 컨텍스트 인 경우.

SELECT 
* 
FROM 
OrderDetails RIGHT JOIN Product ON OrderDetails.ProductID = Product.ProductID 
UNION ALL 
SELECT 
* 
FROM 
OrderDetails RIGHT JOIN ArchivedProduct ON OrderDetails.ProductID = ArchivedProduct.ProductID 

당신이

그것이 DB 스토리지 성능에 영향을 말할 때

예, 있습니다 : ArchivedProduct 테이블에서 삭제 된 제품을 저장하고 수행에 관하여는 다음과 같은 방법

성능 측면에서 오버 헤드는 3 개의 테이블의 크기에 전적으로 의존합니다.

나중에 쿼리 성능을 향상시키려는 경우 사용자 자신의 고려 사항 (예 : 이전에 삽입 된 모든 제품)에 따라 ArchivedProduct 테이블에서 이전에 "삭제 된"제품 중 일부를 제거 할 수 있습니다 ...) 또는 두 번째 SELECT 문에 일부 제약 조건을 추가하십시오. 당신은 여전히 ​​어려운 삭제보다 더 안전한 위치에있을 것입니다.