테이블 부모자식 관계시 이런경우 어떻게 해야하나요? 0 2 146

by 준이파파 [MySQL] [2019.05.14 10:19:32]


제목 없음.png (35,196Bytes)

첨부파일보시면 

여행상품테이블,쿠폰상품테이블,구매이력테이블 이렇게 3개의 테이블이 있고

여행상품테이블과

쿠폰상품테이블의

구매이력을 관리하는 테이블간 관계설정시

구매이력테이블은 두 테이블의 이력을 구분컬럼을 하나 둬서 1일때 여행상품, 2일때 쿠폰상품 으로 하여 모든 이력을 관리하려합니다.

구분은 상관하지말고 여행상품관리의 시퀀스와 구매내역의 상품시퀀스를 외래키로 연결만 해도 인덱스를 타는지 궁금합니다.

by 르매 [2019.05.14 11:01:55]

1. 구매내역.상품시퀀스 컬럼 하나가 2개의 상품 테이블의 시퀀스를 모두 참조하도록 하셨는데, 이 부분은 잘못된 설계인 것 같습니다.
여행상품관리.시퀀스와 쿠폰상품관리.시퀀스를 각각 참조하는 2개의 컬럼을 NULL을 허용하도록 추가하고 `구분` 컬럼에 따라 어느 테이블을 참조하는지 구분하는 것이 좋을 것 같네요.
첨부한 ERD 대로라면.. 여행상품과 쿠폰상품 테이블 모두에 들어있는 시퀀스 값만 구매내역 테이블에 INSERT 할 수 있는데... 이 모델에서는 그렇게 동작하면 안되니까요.

2. 인덱스를 타고 안타고는 첫째로 인덱스가 있는가? 둘째로 인덱스를 타도록 쿼리를 작성했는가? 로 나누어 생각해 볼 수 있습니다.
- MySQL에서는 foreign key를 생성하면 자동으로 참조 컬럼에 인덱스를 생성합니다. (미리 인덱스를 만들어 놓고 참조키를 생성하는 방식을 추천하고 싶기는 하지만...)
- 위 모델 기준으로는 구매내역.상품시퀀스에 인덱스가 있는 상태이니.. 구매내역 테이블을 쿼리할 때 WHERE 절에 상품시퀀스를 사용한다면.. 인덱스를 타는 기본 요건은 됩니다. (옵티마이저 판단하에 풀스캔이나 다른 인덱스를 타는게 낫다면 논외...)


by jkson [2019.05.14 18:41:33]

오~~! 모델러이시네요! 구루비 모델러의 활동 부재가 아쉬웠는데^^

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입