2010-01-25 2 views
0

I가 다음과 같은 관계가있는 데이터베이스 :[MySQL] : 테이블보기 또는 실제 테이블. (추적 기본 키)

Transaction->Purchase->Item->Schedule 

Transaction - self explanitory 
Purchase - any purchase info that relates to the item being purchased (quantity, if the user purchases more than one item). A given Transaction can have more than one Purchase_ID tied to it. 
Item - Stores Item info and relates it to individual clients. 
Schedule - determines the price of an item at a given time of day. 

가 나는이 날짜 - 공급에서 Transaction.TimeStamp 경우 기반으로 일정에서 일련의 값을 선택해야 쿼리를 실행할 필요를 범위. 쿼리는 기본 키를 기반으로 일정에서 값을 선택해야합니다. 기본 키는 트랜잭션에서 추적 할 수 없습니다.

이 문제를 해결하기 위해 나는 Schedule의 Transaction에 직접 Transaction을 연결할 테이블을 만들기로했다.

최근에 나는 Table Views을 발견했습니다. 이것이 테이블 "보기"를 만드는 데 적절한 상황입니까? 아니면 '실제'테이블 TransactionSchedule을 작성해야합니까?

transactionSchedule 
Transaction_ID Schedule_ID 

제 문제는 테이블보기가 유용하거나 그 이점이 무엇인가에 대한 구체적인 내용을 이해하지 못하는 것입니다.

거래 추적 -> 과다 계획에 대한 개별 테이블을 보유하고 있습니까?

이 문제에 대한 모든 일반적인 지침은 크게 감사하겠습니다.

편집 : 만 데이터를 검색이 쿼리가 이미

입력되어있다 내가 구매에 직접 일정에서 가격을 복사 할 것을 촉구 강하게 것

답변

2

을 --thanks 그걸 삽입하자마자. 그렇게하면 문제를 해결할 수 있으며 실수로 (또는 의도적으로) 일정을 변경하는 경우 고객에게 나중에 다른 가격이 청구되는 것을 방지 할 수 있습니다.

일정의 기본 키와 관련하여, 이것은 전환으로 추적 할 수 없습니다. 이는 잘못된 디자인의 징조입니다. 내 생각에, 그것에 대해 생각해보십시오. 트랜잭션에 타임 스탬프가 있습니다. 정의에 의한 일정은 시작 시간과 종료 시간을 사용하여 시간에 배치됩니다 - 왜 그들을 관련시킬 수 있습니까? 정말, 그에게 달려 - A로부터 내 쿼리를 타임 스탬프가에 관해서는

SELECT  ..your columns.. 
FROM  Transaction t 
INNER JOIN Purchase p 
ON   t.id  = p.transaction_id 
INNER JOIN Item  i 
ON   p.id  = i.purchase_id 
INNER JOIN Schedule s 
ON   i.id  = s.item_id 
AND  t.timestamp BETWEEN s.from_timestamp 
          AND s.to_timestamp 

것 AFAICS은, 일정의 기본 키는 당신이보기 여부를 사용해야합니다, 일정 테이블이 가정 item_id, from_timestamp, to_timestamp

해야한다 당신. 보기가 쿼리보다 좋거나 나쁘게 작동하지 않는 유일한 차이점은 정의가 데이터베이스에 저장된다는 것입니다. 그의 주요 장점은

입니다
    쿼리를 복사 (그것을 엉망으로)하지 않고 정의를 다시 사용할 수 있습니다
  • 명는
  • 당신이 어느 정도의 스키마를 변경하고 응용 프로그램이 제공에서 당신을 업데이트하는 것이 숨길 수 있습니다 (이 후자의 이점은 종종 과대 평가됩니다)
+0

"그"구매 나 일정 정보에서와 같이?문제를 해결하지만 스케줄링 시스템은 해당 이벤트를 처리 할 때 예상대로 작동합니다.이 쿼리는 이미 입력 된 데이터를 검색하는 데만 사용됩니다. –

+0

구매시와 동일합니다. –

+0

그리고 이상하게도 시스템이 이미이 작업을 수행합니다 (구매 가격 추가).이 DB를 구축하지 않은 저와 제 동료는 가격을 구매에서 제외해야한다고 동의했습니다. –

0

외래 키가 일정 기본 키와 연결된 거래를 할 수 없습니까? 또는 다 - 대 - 다 관계입니다. 어느 쪽이든 나는 여기서 적절한보기를 보지 못합니다.

+0

왜보기가 적절하지 않습니까? –