삭제 표시 및 고유 제약 조건 충돌에 대한 솔루션

최근에 이런 문제가 발생했는데 데이터베이스 데이터의 고유성을 보장하기 위해 고유 제약 조건을 추가해야 했는데 갑자기 논리적 삭제가 고유 제약 조건과 충돌하는 것을 발견했습니다.
관련 정보를 상담한 후 몇 가지 해결책도 얻었습니다. 제가 생각하는 표준 답변은 다음과 같습니다.

1. 문제 설명

여기서 사용하는 삭제 표시 필드는 type 입니다 isDeleted. 삭제되지 않음: 0, 삭제됨: 1. 따라서 데이터가 삭제된 경우 상태는 모두 1이 됩니다. 이때 삭제된 데이터는 고유하지 않은 것이 허용됩니다. 단, 삭제 취소된 데이터의 데이터는 고유해야 합니다.tinyint

그러나 isDeleted고유 필드 제약 조건이 추가되면 삭제된 데이터는 고유하지 않게 되어 삭제 업무에 영향을 미치게 됩니다. 따라서 현재 상황에서는 고유 제약 조건을 사용할 수 없습니다.

2. 솔루션

deleteAt필드를 추가하고 bigint입력하세요. 삭제 시간을 기록하는 데 사용되는 타임스탬프이며, 삭제되지 않은 경우 0입니다.
즉, 데이터를 삭제할 때 두 개의 필드가 유지되는데, 하나는 isDelete삭제 여부를 결정하는 데 사용되고 다른 하나는 deleteAt삭제 시간을 기록하는 데 사용됩니다.
고유 제약 조건을 사용하면 deleteAt고유 제약 조건이 추가됩니다.
이때 삭제되는 데이터는 deleteAt달라야 하므로 중복이 발생하지 않습니다.
삭제되지 않은 데이터는 deleteAt모두 0입니다. 이때 해당 업종은 고유 제약의 영향을 받아 중복될 수 없습니다.
내 문제를 완벽하게 해결했습니다.

도움이 되었나요? 엄지 척~

Supongo que te gusta

Origin blog.csdn.net/qq_42068856/article/details/130014525
Recomendado
Clasificación