2011-10-20 2 views
2

내 고객은 장기 임대 대행사입니다. 그래서 우리는 등을 수리 된 것으로 다른 상태에 걸릴 수 있습니다 추가 재고 테이블에 파생 상태 필드가 있습니까?

Goods 
    pk modelId 

Stock 
    pk stockId, fk modelId 

Rentals (rented stock) 
    pk rentalId fk stockId 

을 가지고 한 번에 두 개 이상의 상태가있을 수 있습니다.

그것은 내 인생을 주식 테이블에 상태 필드를 넣는 것을 더 쉽게 만들지 만, 궁극적으로 그것은 다른 테이블에서 추론 할 수있는 데이터를 얻습니다. 예를 들어 재고 수량이 0 인 상품을 포함하여 총 재고 수량 (임대되지 않은 상품)을 찾는 중입니다. 주식 테이블

  • 에 I

    • 추가 임대, onRepair 등 상태 필드는
    • 이 모든 시간을 찾아 손 필드에서 재고를 유지해야 하는가? 나는 상태 또는 다른 속성에서 파생 될 수있는 등 주식 즉, 제조업체

  • 답변

    1

    만약의 종류 여기에서 설명하는 것보다 더 복잡한 분류가로 주식과 상품 테이블이 분리되어

    PS 다른 테이블에서 구현하기 쉬운 옵션은 그대로 유지하고 "매번 조회"하는 것입니다. 귀하의 테이블은 정상화 상태를 유지합니다. 트리거와 같은 복잡한 솔루션으로 파생 된 값을 유지할 필요가 없습니다.

    언제 다른 옵션을 고려해야합니까? 위의 접근 방식이 느려지는 경우 - 쿼리를 최적화 했더라도. 예를 들어 10 년 동안의 주가 평균과 수천 개의 주식 및 상품에 대한 평균을 계산해야하는 경우 쿼리가 신속하게 계산되지 않을 수 있습니다.

    그래서 먼저 집계 또는 기타 필요한 파생 데이터가있는 테이블이나 필드를 추가 할 수 있습니다. 인덱싱 된 뷰 (대부분의 RDBMS에 해당 기능이 있음) 또는 데이터 집계를위한 추가 테이블을 사용할 수 있습니다. - 이전 날짜/월/년의 주가에 대한 통계 데이터 예를 더 이상 변경할 수없는 데이터에 대해서는 잘 작동 할 수 있습니다. 일/월/년이 끝나면 계산이 완료되고 (한 번) 테이블이 업데이트됩니다. 그런 다음 이전 데이터의 테이블을 빠르게 seacrh 할 수 있고 더 새로운 데이터의 "활성"테이블을 seacrh 할 수 있습니다.

    더 복잡한 상황의 다른 옵션에는 파생 값을 유지하는 트리거가 포함됩니다. 이 자료를 마지막 자료로 사용 하겠지만이 문제에 대해서는 반대 의견이 확실합니다.

    +0

    감사합니다.보기를 사용하지 않았습니다. – SuprF1y

    관련 문제