2012-08-25 2 views
1

각 광고 항목이 제품과 연결된 도메인 모델이 있습니다. 제품에 옵션 목록이 있습니다. 각 옵션은 필수 또는 선택적입니다. 사용자는 옵션을 선택하여 광고 항목의 선택 목록에 추가 할 수 있습니다.중복 참조와 기록 데이터

중복을 피하기 위해 먼저 광고 항목의 선택 목록에서 필수 옵션을 제외했습니다. 필수 옵션이 많으므로 모든 광고 항목에 포함시켜야 비 대한 데이터베이스가 생성됩니다.

문제는 제품이 잠재적으로 시간이 지남에 따라 변경 될 수 있다는 것입니다. 한 번 필요한 옵션은 선택 사항이 될 수 있고 그 반대 일 수 있습니다. 완전히 새로운 옵션이 제품에 추가 될 수 있습니다. 이는 광고 항목의 선택 목록의 의미가 주문 당시의 제품 옵션에 따라 달라지기 때문에 초기 아이디어에 문제가 발생합니다.

그럼 어떻게해야합니까?

  1. 광고 항목의 선택 목록에 필수 옵션을 포함하면 모델이 간단합니다. 제품에 포함 된 옵션에 대한 스냅 샷을 볼 수 있습니다. 그러나 필요한 옵션에 대한 참조가 모든 광고 항목에 대해 반복되기 때문에 데이터베이스에 너무 많은 비중을 차지했습니다. 이 문제에 대해 걱정해야합니까, 아니면 SQL Server가 일종의 비하인드 압축을 수행합니까?

  2. 광고 항목의 선택 목록에서 필수 옵션을 제외해야한다고 생각합니까? 그런 다음 제품에 대한 변경 사항에 대한 기록 데이터를 보관해야합니다. 그런 식으로 주문 당시 제품과 옵션을 다시 만들 수있었습니다. 가능하지만 첫 번째 옵션보다 복잡합니다. 더 많은 CPU주기가 걸릴 것이라고 걱정하지만 아주 자주 열리지 않는 오래된 주문에 대해서는 괜찮습니다. 나는 결코 전에 이것을 할 필요가 없었지만 아마도 그렇게 힘들지 않을 것이다. 이것이 당신이 권장하는 접근법이라면, 시작하는 데 도움이되는 디자인 패턴 등에 대한 몇 가지 지침을 제공해주십시오.

답변

1

필요한 옵션 목록이 향후 변경 될 가능성이있는 경우 첫 번째 옵션을 사용합니다. 데이터베이스의 각 라인 항목에 해당 옵션을 저장하지 않으면 어떤 옵션이 어떤 날짜에 필요했는지 추적하고 별도로 결합해야합니다. 이렇게하면 불필요하게 조인 논리가 복잡해집니다.

귀하의 데이터베이스를 bloating에 관해서는, 당신이 생각하는 것처럼 나쁠 것이라고는 생각하지 않습니다. ProductOptionsLineItemOptions에 대한 조인 테이블이 제품 키와 옵션 키만 포함하고있는 것 같습니다. 이 후자의 표는 첫 번째 디자인 선택에 따라 더 많은 레코드를 갖는 유일한 것입니다. 키만 포함되어 있기 때문에 레코드가 더 많은 메모리를 차지하지 않으므로 어쨌든 실제로 합류 할 수 있습니다.