2012-04-23 5 views
1

간단한 주식 데이터베이스는 티커 테이블, 교환 테이블 및 통화 테이블의 3 개의 테이블을 가지고 있습니다. 티커 테이블에는 기호 열 (예 : IBM)과 교환 테이블의 행에 대한 외래 키라는 두 개의 열이 있습니다. 교환 테이블에는 이름 열 (예 : NYSE)과 통화 테이블의 행에 대한 외래 키라는 두 개의 열이 있습니다. 통화 표에는 하나의 열 (기호 : 예 : USD)이 있습니다. (각 테이블의 기본 키 열을 생략했습니다).MySql 다중 테이블 제약

같은 통화에 대해 동일한 종목 코드가 두 번 있어서는 안된다는 제약 조건을 적용하려면 어떻게해야합니까? 즉, 하나만 허용하려고합니다 (IBM + USD). (ticker.symbol + ticker.exchange)에 유일한 제약 조건을 만드는 것만으로는 충분하지 않습니다. (IBM + NASDAQ)가 이미있는 경우 유효하지 않습니다 (IBM + NYSE). 티커 테이블과 통화 테이블에 가입하고 view (view.ticker + view.currency)에 고유 인덱스를 만드는 뷰를 만들 수 있다고 생각했습니다. 그러나 지금까지 말할 수있는 한, 뷰에 인덱스를 만들 수 없습니다.

+0

나는이 제약 조건이 좋은 아이디어라는 것을 확신하지 못합니다. 회사는 실제로 동일한 통화로 두 개의 거래소에 나열 될 수 있습니다. 특히 유럽에서 두 회사의 거래소에 회사가 나열 될 수 있습니다 (유로화 모두). – eggyal

+0

괜찮 았습니다. 세부 사항으로 모든 사람을 압도하고 싶지는 않았지만 실제로는 '기본 교환'입니다. 티커 테이블의 각 행에 대해 많은 2 차 교환이있을 수 있습니다. 그러나 동일한 (티커 + 통화)로 여러 행을 가지지 않는 제약은 여전히 ​​합리적입니다. 그래도이 생각을 해줘서 고마워. – Jimmy

답변

1

나는 는 MySQL의에서이 제약 조건을 지정하는 것이 가능 생각하지 않는다, 그러나 당신은 사용 triggers은 조합이 이미 (그들이 할 경우 오류를 제기) 존재하지 않는 것을 확인하기 위해; 단, 시세표에 삽입하기 전과 세 개의 모든 테이블에서 업데이트하기 전에 트리거가 있어야합니다.