2012-10-17 4 views
0

세부 엔티티 DetailB가있는 마스터 엔티티 MasterA가 있습니다. DetailB에 외래 키가있는 별도의 엔티티 DetailC가 있습니다.정규화 및 관계

내 쿼리에서 나는 많은 DetailC 목록을 쿼리하지만 MasterA와 관련하여 DetailC를 쿼리해야합니다. 이 경우 쿼리 속도를 높이려면 DetailC와 MasterA간에 외래 키 관계를 만드는 것이 좋습니다. (DetailB로 조인하는 것보다). 응용 프로그램 계층에서 DetailC의 FK가 (DetailB에 지정된 것과) 동기화되어 있는지 확인합니다. 감사합니다.

+0

저는 처음부터 DetailB에있는 외래 키가 왜 있는지 궁금합니다. 내 작업의 예제를 사용하려면 공급 업체 (MasterA)의 납품서에 납품 된 부품에 대한 라인 (DetailB)이 포함되어 있습니다. 각 부분에는 여러 줄의 사양 (DetailC)이 있습니다. 어떤 사양이 어떤 순서 (예 : DetailC 및 MasterA)에서 왔는지 묻는 데이터베이스를 쿼리 할 수 ​​있지만 데이터 *는 DetailB를 통과해야합니다. MasterA와 DetailC 사이의 직접 연결은 의미가 없습니다. –

+0

답장을 보내 주셔서 감사합니다. 나는 그 관계가 의미가있는 경우가 있다고 생각합니다. 모든 납품서 라인에 대해 구매 주문서를 작성할 수 있도록 예제를 확장합니다. 구매 주문서가 납품서 노트 라인에 연결되는 이유는 납품서에 다음과 같은 라인이 포함될 수 있기 때문입니다 (공급 업체를 거치지 않아도됩니다) –

+0

구매 주문 라인이 납품 노트 라인에 연결되는 이유는 납품 노트에 배송지가 주문과 직접 ​​연결된 경우 한 주문에 대해서만 메모를 생성 할 수 있습니다. –

답변

1

MasterA와 관련된 외래 키가 될 DetailC에 필드를 추가 할 수 있습니다. 그러나 DetailC와 DetailB와의 관계가 있고 DetailB와 MasterA와의 관계가있는 경우이 여분의 필드는 중복됩니다. 엄밀한 정규화는 그러한 필드가 없어야한다고 말하지만 데이터에 불일치가 없다는 것을 보장 할 수 있다면 정규화 규칙을 완화 할 수 있어야합니다.

1

데이터에 따라 다르다고 생각합니다.

당신이 DetailC와 MasterA에 대해 뭔가 관련이 있다고 생각한다면, 저는 그렇게 생각합니다.

효율성에 대해 걱정한다면 디자인 상 거래가 항상 발생한다고 생각합니다. 이 경우 귀하의 속도 (또는 귀하의 편리함)와 거래하려면 데이터 크기를 늘려야합니다.

+0

의견을 보내 주셔서 감사합니다 +1 –