문제
블로그 데이터 모델에 대한 다음 설정이 있습니다.
Blog Articles Categories ----- -------- 1 ---------- ID \ 1 * ID /----- ID Name \------------ BlogID / Name Owner Name * / CategoryID-/
이 데이터 모델이 블로그의 '모범 사례'와 어떻게 일치하는지 걱정합니다. 블로그가 삭제 된 경우 해당 블로그의 모든 기사를 삭제해야합니까? 카테고리가 삭제되면 기사는 어떻게 되나요?
더 좋은 방법이 있습니까? 내가 놓친 것이 있습니까? '베스트 팩터'는 무엇을 제안합니까?
해결책
이것은 실제로 사용 사례에 따라 다릅니다. 많은 블로그 애플리케이션은 기사를 보는 것보다 많은 태그와 관련된 기사를 보는 것이 더 의미가 있기 때문에 일대일 relationsip의 범주 대신에 다수의 관계를 가진 태그를 사용합니다. " "카테고리 내에서"포함되어 있습니다.
블로그의 논리가 기사가 카테고리에 엄격하게 포함되어 있다는 것이라면, 일대일 관계가 정당화됩니다. 그리고 어떤 상황에서는 계단식 삭제도 정당화 될 것입니다. 결국, 고아가있는 기사는 어디에 존재했을까요?
이것은 사용자 기반의 직관을 예상 해야하는 경우입니다. 어떤 것 그들 자연 스럽다고 가정합니다.
덧붙여서, 그것은 훨씬 더 많은 일이지만, 그것이 나라면, 나는 계단식 삭제를하지 않을 것입니다. 나는 기사를 고아로 표시하고 대부분의 견해에서 숨길 것입니다. 또한 고아가있는 기사를 복원하기위한 인터페이스도 제공 할 것입니다. 그리고 나는 일정 기간 이상으로 고아가 된 것을 삭제하는 스크립트를 제공하는 것을 고려할 것입니다. 이렇게하면 사용자가 발생할 것으로 예상되는 일에 대해 틀린 경우 문제를 해결할 수 있습니다.
다른 팁
이것 (구형) 게시물 자세한 토론을 포함하여 일부 태그 관련 DB 스키마 변형을 소개합니다. 아마도 좋은 출발점 일 수도 있습니다.
의존합니다. 블로그 엔진에 지정된 범주가없는 항목이 허용되지 않으면 결과를 사용자에게 알리고 기사를 삭제해야합니다. 그렇지 않으면 사용할 수 있습니다 ON DELETE SET NULL
대신에.
관계가 제대로 설정되면 모든 관련 데이터를 먼저 삭제하지 않고 카테고리를 삭제할 수 없습니다. 카테고리를 삭제하면 기사를 삭제하는 것이 이상하게 보이지만, 동시에 카테고리가 더 이상 유효하지 않으면 기사도 없어야합니다.
아마도 모든 기사를 새로운 카테고리로 재구성하는 옵션 일 것입니다.
몇 가지 질문. 기사에 둘 이상의 범주가있을 수 있습니까? 기사가 그들과 관련된 0 범주를 가질 수 있도록 허용하고 있습니까? 그래도 설명에 따르면 기사를 삭제하고 싶지 않다고 말합니다. 블로그를 개발할 때의 경험에서 카테고리는 일반적으로 기사/게시물 (여러 게시물을 설명하는 여러 범주)과 많은 관계입니다. 그래서 나는 그것들을 삭제하지는 않지만 다시 한 번 당신의 비즈니스 논리와 당신이 그것을 처리하는 방법에 따라 다릅니다.
글쎄, 당신의 외국 열쇠 ( ~해야 한다 존재) 블로그 카테고리를 블로그 게시물과 관련하여 허용되지 않습니다. 기사 및 참조 무결성을 유지하려면 기사의 범주를 다른 기사로 변경하는 것을 고려해야합니다.
데이터 모델을 잊고, 객체 모델을 사용하는지, 즉 데이터가 구현되고, 객체는 인터페이스이며 요구 사항에 더 가깝습니다.