2011-10-14 2 views
0

레일즈에서 (아주) 단순한 주식 거래 시뮬레이터를 모델로 삼아 3.1을 가지고 놀고, 평소 앉아있는 UX와는 대조적으로 웹 백엔드에 대해 더 많이 배우려고합니다.다수의 주식 거래 모델링 레일

그래서 당신은

Users (has many transactions) 
Transactions (belongs to users, companies) 
Companies (has many transactions) 

따라서 사용자가 회사의 주식의 수를 구입

을 가지고 말할 수 있습니다, 그것은 특정 거래에 구입 한 주식의 수를 반영 양의 열이있는 트랜잭션 레코드를 작성 , 그 당시의 주가, 그리고 사물이 팔렸는지 또는 팔렸는지를 나타내는 상태 칸이있다. (단순화를 위해 학습 운동이므로 1 거래에는 하나의 구매 또는 판매 이벤트가 포함된다고 가정하십시오.)

그래서 사용자는 어떤 종류의 이상한 양의 같은 회사.

그는 전혀에서

  • 을 지분을 소유하는 경우 각 회사

    • 에 대한

      을 파악하기 위해 쿼리 및 요약 할 수 있어야합니다 여러 트랜잭션 행을하게 될 겁니다 얼마나 그가 소유 (모든 구매 - 판매)

    그래서 제 질문은이,이 모델입니다 이 유형의 사용에 맞습니까? 예를 들어 사용자가 소유하고있는 것을 나타내는 페이지를 작성하려는 경우 성가시다. 소유하고 소유 한 금액을 결정하기 위해 모든 종류의 금액을 실행하는 것을 의미합니다. 그러나 어쩌면이 일들이 어떻게 이루어져야한다는 것인가? 아니면 더 좋은 방법이 있습니까?

    '소유권'을 나타내는 하나의 트랜잭션을 유지 관리하고 '소유'된 각 회사에 대한 열을 업데이트 한 다음 개별 트랜잭션을 분리하여 트랜잭션에 조인 된 두 번째 transaction_history 테이블에 기록하는 것이 더 좋습니까?

  • 답변

    0

    모델 구조가 괜찮다고 생각합니다. 사용자의 현재 소유권을 단순화하려는 경우이 정보를 효과적으로 캐시하기 위해 추가 테이블을 추가 할 수 있습니다. 아마도 사용자, 회사 및 소유 주식수를 참조하는 OwnedShares 모델을 추가하십시오.

    그런 다음 트랜잭션 모델에서 "after_save"콜백을 사용하여 이러한 OwnedShares를 업데이트 할 수 있습니다.

    이 구조를 사용하면 사용자의 현재 소유권에 대한보고는 쉽지만 거래 내역을 잃지는 않습니다.

    +0

    나는 그것을 좋아한다. after_save 콜백을 통해 0 공유가 더 이상 소유되었다고 계산하면 소유 공유 항목을 모두 삭제하는 것이 합리적인 일이라고 생각하는 것이 맞습니까? 그게 나 한테 가장 이해가가는 것 같아. – Dave

    +1

    예. 콜백에서 적절하게 생성, 업데이트 또는 삭제한다고 생각합니다. –

    +1

    이 캐싱 된 정보는 미리 계산 된 쿼리 또는 http://martinfowler.com/bliki/EagerReadDerivation.html입니다. –