2010-01-27 6 views
1

나는 세 개의 테이블을 가지고 있습니다. -[MySQL] :이 테이블을 연결하는 '효율적인'방법이 있습니까?

Transaction: 
ID TimeStamp 

Discount: 
Code Amount 

Transaction_Discount: 
ID  Code 

거의 기본적으로 얻을 수있는 것입니다.

이 테이블을 함께 연결하는 '효율적인'방법이 있습니까?

+2

1 : 1 또는 1 : 1 관계입니까? – HLGEM

+0

솔직히 잘 모르겠다. 정확히 무엇인지 ...하지만 나는 many-to-many라고 믿는다. –

+0

하나의'TRANSACTION' 레코드에 하나 이상의'TRANSACTION_DISCOUNT' 레코드가있을 수 있습니까? 그렇다면 - 일대 다 관계입니다. 그렇지 않으면 일대일 관계이고 일대일 관계를 갖는 것이 아무런 이점이 없습니다. 왜냐하면'TRANSACTIONS' 테이블에'CODE' 컬럼을 갖는 것과 같기 때문입니다. –

답변

5

을 모델링하는 경우 트랜잭션은 0 개 이상의 할인을 가질 수 있으며 할인은 0 개 이상의 트랜잭션에 적용될 수 있습니다.이 3 테이블 접근 방식은 표준 방법입니다.

유일한 변경 사항은 코드 필드 외에도 숫자 기본 키를 할인하고 Transaction_Discount의 외래 키로 사용하는 것입니다.

+0

+1 위대한 제안, 정확히 내가 할 일. – David

1

일대일 경우 거래 테이블에 할인 코드 필드를 추가하십시오.

일대일 인 경우 할인 테이블에 트랜잭션 ID를 추가하십시오.

많은 경우 많으면 3 테이블 솔루션 만 사용해야합니다.

0

귀하의 의견에 따르면,이 관계는 많은 거래에 적용됩니다. 많은 거래에 한 번의 할인이 적용될 수 있습니다.. 다음과 같이

따라서, 당신은 당신의 테이블을 모델링해야합니다

Transaction table: 
id, discount_id, timestamp 

Discount table: 
id, code, amount 

당신이 제 3 링크 테이블에 대한 필요가 없습니다 볼 수 있듯이. 이 관계는 다 대다 관계 일 경우에만 필요합니다.

또한 거래가 하나의 할인만을 갖기 때문에 거래 테이블에 할인 ID를 외래 키로 저장한다는 것을 볼 수 있습니다. 이렇게하면 원하는 경우 동일한 할인을 참조하는 많은 거래가있을 수 있지만 각 거래는 오직 하나의 할인만을 참조합니다.

관련 문제