2010-01-05 4 views
0

시나리오 : "송장"에는 "사용자"클래스에 대한 참조가 있습니다. 사용자 개체는 사용자 또는 관리자를 통해 삭제되지만 송장 개체에는 여전히 수신자 (사용자)가 필요합니다.개체를 삭제 된 것으로 표시하지 않으려면 어떻게해야합니까?

사용자 개체를 물리적으로 삭제하는 대신 삭제 된 것으로 표시 할 수 있습니다. 하지만 삭제 된 것으로 표시된 객체를 사용하는 것은 좋지 않은 디자인이라고 생각합니다. 제 생각에는 객체는 삭제 후 법적인 요구 사항에 대해서만 보관되어야하며 정기적으로 사용되지 않아야합니다. 삭제, 선택, 데이터베이스 백업 ... 내가 객체를 사용하지 어떻게

를 케스 케이 딩 삭제 표시된 같이

그들이 물리적으로 몇 가지 쉽게 제거하려면? 데이터베이스에서 사용되지 않는 객체를 물리적으로 제거하려면 어떤 디자인이 필요합니까? 모범 사례가 있습니까?

컨텍스트 : Java EE 및 관계형 데이터베이스를 기반으로하는 OOP (DDD) 응용 프로그램입니다.

답변

2

인보이스와 사용자가 실제로 의미하는 바는 무엇을 의미합니까?

현실 세계에서 인보이스를 삭제할 수있는 방법을 찾지 못했습니다. 인보이스가 고객에게 잘못 발행되면 무효화 될 수 있지만 물리적 데이터는 삭제 될 수 없으며, 그렇지 않으면 인보이스를 구성하는 정보를 보유 할 방법이 없습니다. 인보이스가 유효하지만 관련 사용자가 해지 된 경우 인보이스와 연결된 사용자를 볼 수 있어야합니다. 그렇지 않으면 인보이스 발행 또는 승인자 정보를 잃게됩니다.

삭제 된 개체를 사용하는 것을 피하려면 여기에 해당 개체가 실제로 삭제 될 수 없으므로 여기에는 적용되지 않는다고 생각합니다. 그들은 분명히 지불되거나 수집되는 새로운 청구서 나 청구서를 작성하는 사용자에 대해 유효 기간이 만료되었거나, 무효화되거나, 유효하지 않거나 유효하지 않은 상태에 있지만 분명히 존재하지 않거나 존재하지 않았다고 간주되어 삭제되지는 않습니다. 왜냐하면 트랜잭션이 커밋 된 이후 분명히 어떤 시점에 존재했습니다.

0

데이터베이스 수준에서 적어도 두 가지 확실한 대안이 있습니다.

1) 연결된 송장이있는 경우 사용자를 삭제할 수 없습니다.

2) 사용자가 삭제되면 관련된 모든 인보이스가 사용자와 함께 삭제됩니다. 이는 참조 무결성 및 계단식 삭제를 통해 가장 효율적으로 수행 할 수 있습니다.

송장을 삭제 된 것으로 단순히 표시하는 것은 나쁜 습관입니다. 그것이 정말로 삭제 되었다면, 그것은 데이터베이스에서 나오거나 어딘가에 보관되어야합니다.

랜디

+0

좋아, 데이터베이스 수준에서 나는 당신과 동의합니다. 그러나 문제는 응용 프로그램/아키텍처 수준에 더 있습니다. 한편으로는 사용자가 삭제되어야하고, 한편으로는 사용자 데이터가 여전히 송장에 필요합니다. 참조 무결성을 사용하면 사용자를 삭제할 수 없습니다. "삭제하기 전에 필수 데이터 복사"라는 형식이 필요합니다. – deamon

+0

여기에 디자인 문제가 있습니다. 송장을 보관해야하는 경우 사용자를 유지해야합니다. 정말 간단합니다. 사용자를 비활성 또는 이와 비슷한 것으로 표시하는 것이 좋습니다. 상위 행은 삭제할 수 없으며 하위 행은 고아가 될 수 없습니다. 고객 (사용자)이 누구인지 알 수없는 경우 인보이스를 보관하는 것은 무엇입니까? –

0

인보이스를 보관해야하는지 확실하지 않은가요?

예인 경우 몇 가지 옵션보다 많습니다. 하나는 삭제 된 플래그로 사용자를 유지하는 것입니다. 원래 사용자가 누구인지 알지 못한다면 "삭제 된 사용자"사용자 개체를 만드는 것이 좋습니다. 인보이스를 삭제 된 사용자에게 연결할 수 있습니다.

대답이 '아니오'인 경우 삭제 된 사용자를 참조하는 모든 개체를 삭제하기 만하면됩니다. 수동으로 또는 데이터베이스의 계단식 삭제 기능을 사용하여이를 수행 할 수 있습니다.

2

나는이 토론을 내 조직의 여러 사람들과 여러 번 논의했습니다. 나는 사용자 계정을 삭제해야한다고 생각하지 않습니다. 사용자가 한 일의 기록을 쉽게 유지할 수있는 기본적인 경우에만 해당됩니다. 활성, on_hold, 비활성화와 같은 사용자 상태를 제안합니다. 그런 다음 필요에 따라 사용자 계정을 비활성화하는 것입니다. 물론, 사용자를 "선택"할 때 사용자가 활성화되어 있는지 확인해야합니다. 또한 사용자가 다시 조직으로 돌아 오는 경우에도이 작업을 쉽게 수행 할 수 있습니다.

+0

동의 - 특히 금융 거래 추적의 경우. 어떤 이유로 사용자를 정말로 삭제해야하는 경우 - 익명화를 유지하면서 나머지 관계 및 일부 필드는 그대로 유지하는 것이 좋습니다 (사용자 유형, 상태 등). – KenFar

0

왜 삭제 된 정보를 유지해야합니까? 일반적으로 감사, 준수 또는 법적 요구 사항을 준수해야합니다.

일반적으로 데이터베이스의 초기 상태를 재생성하면 충분합니다. 데이터베이스가이를 지원합니다. 대부분의 경우

, 그것은 로그 각 항목이 삭제 된 경우 추적 할 수 동작을

  • 을 삭제하고, 누구에 의해

    1. 하는 것이 중요하다.

    실제로 데이터베이스에서 삭제할 수없는 경우 보관 된 테이블에 보관하거나 데이터베이스 테이블을 분할하여 삭제 된 개체가 쿼리의 효율성에 영향을주지 않도록 할 수 있습니다.

  • 관련 문제