개발자들끼리 처음으로 그룹웨어 데이터베이스를 설계하고 있는데 서로 경험이 달라서 의견 충돌이
많아 고민입니다.
아래의 경우 어떻게 설계를 하는 것이 좋은 지...
참조 무결성을 유지하면서 조회 성능을 좋게 하고 싶은데...의견을 구합니다.
그림1:
-사원정보 : 사원번호(pk)
-근태정보 : PK(날짜 + 사원번호(FK))
근태정보에서 사원번호를 FK로 가져옵니다. 저는 (날짜 + 사원번호)로 하면 데이터 중복이
안일어나니까 (날짜 + 사원번호) 이렇게 두개의 컬럼을 결합해 기본키로 잡고 가려고 주장하고 있습니다.
조건 절의 경우 where 날짜 = '' and 사원번호 = ''
또는 where 날짜 = '' 또는 where 사원번호 = ''
이렇게 될것으로 생각하고 있습니다.
결합기본키의 경우 기본적으로 생성시 앞 순서인 날짜에만
클러스터인덱스가 생성되는 것 같았습니다.
그래서 둘다 조건절에 들어갈 경우나 날짜만 검색시에는 생성된 index를 사용하는데
사원번호만을 검색할 경우는 테이블 스캔을 하더라구요.
그래서 결합기본키는 성능이 안좋으니 아래처럼 하자며 그림2가 나왔습니다.
그림2:
-사원정보 : 사원번호(pk)
-근태정보 : PK(근태번호) , 날짜 , 사원번호(FK)
기본키는 그냥 근태번호라는 걸 생성하고 검색에 쓰이는 날짜나 사원번호는
일반 속성으로 넣고 조회성능을 위해 그 속성들에 인덱스를 걸자는 취지지요.
근데 근태번호는 고유키이긴 한데, 범위검색에 자주 쓰이는 속성은 아닌것 같아서요.
어찌 하는 게 좋을 까요.
제 경우는 필요에 따라 FK를 가져온 것을 기본키에 포함 시키기도 하구 그냥 일반속성으로 넣기도 하고 그러는 데 반해
다른 개발자분의 경우 FK로 가져온 것은 위처럼 결합 기본키는 사용을 안하시고 그냥 일반속성에 넣고 기본키는 테이블마다 따로 생성을 하면서 디자인 하는 경향이거든요.
서로 다르니까 애로사항이 많습니다.
어떻게 서로 중간지점을 찾을 수 없을런지...도움말 부탁드립니다. |