안녕들 하세요..
고수님들,, 특히 DB design에 고수이신 여러님들께 질문 드립니다.
다소 내용이 길지도 모르겠으나.. 꼭 좀 읽어 보시고,, 답변 부탁드립니다.
다음과 같이 3개의 테이블이 있다고 할 때...
(고객) (계열[VISA/MASTER]) (카드번호)
조건: 1명의 고객은 VISA카드를 여러장 가질 수도 있고,
또 MASTER카드도 여러장 가질 수 있다.
따라서 관계는 고객:계열 = 1:2
계열:카드 = 1:N
이렇게 설계가 되어있는데요...
그런데 문제는 현재 설계되어있는 테이블이 중복된 컬럼이 많다는 겁니다.
이를테면,, 카드소유자 성명이 고객테이블에도 있고, 계열테이블에도, 또
카드테이블에도 있습니다. 물론 컬럼이 중복되서는 안될테니만...
이유는 간단합니다. 만약 특정한 카드번호를 이용해 그 카드의 소유자
이름을 알고 싶다면 굳이 JOIN을 하지않고 그냥 카드테이블만 읽어서
이름을 찾겠다 이거죠.
그도 그럴것이 각각의 테이블의 크기가 몇 백만건 정도 된다면
이름 하나를 찾기 위해서 3개의 테입블을 JOIN해야 하는가라는
문제에 부딛히게 되거든요.. (정규화 논리상 이름은 고객테이블에만
있어햐 한다는 조건하에...)
그럼,, 질문 드리겠습니다.
과연 이름이라는 컬럼은 고객테이블에만 있어야 하고 항상 JOIN을
통해서 찾아야 한다. (=중복을 없애야 한다.) 라고 했을 때
시간과 서버의 부하가 많이 갈까요? JOIN땜에??
아니면,, 트리거를 이용해 성명이 바뀌면 다른 테이블의 성명컬럼도
바꿔주는 방법을 이용해서라도 그냥 각각의 테이블에 모두 갖고 있어
굳이 JOIN을 통하지 않고라도 쉽게 찾는다...
이 두가지 중 어떤것이 옳고 타당할런지요..
고수님들의 답변 부탁드립니다...
참고로,, 현재 저희 회사에서는요 ....
그냥 각각의 테이블에 이름을 두고,, application에서 이름변경 등의 거래가 들어오면 모든 테이블의 성명컬럼을 모두 바꿔준다.
=(모든 데이터 정당성은 프로그래머가 책임진다)
뭐 이런 식으로 되어있거든요.
그래서 이번에 싹 뜯어 고치고 설계부터 다시 하는데
이 부분에서 선배(파일시스템에 익숙해 있는)와 의견 충돌이 있어서요...
저는 1번 의견이고, 선배는 3번 내지는 2번 의견이죠..
긴 글 읽어 주셔서 감사하고요.. 답변 부탁드립니다...
|