안녕하세요.
데이터베이스 설계 후 기능 구현 중 궁금한 것이 있어 질문 올립니다.
현재 데이터베이스 구조 예
* (A) 과목테이블 {key , 과목명 }
* (B) 학생테이블{ key, 학생이름, 학생번호, 반 }
* (C) 시험일자테이블 {key, 시험일자, 시험목적, 시험장소 }
* (D) 시험학생참여테이블{ 과목key, 학생key, 시험key, 점수 }
이런 형태로 구성되어 있습니다.
처음에는 시험학생참여테이블에 국어,영어,수학 등 과목을 각각의 칼럼으로 Fix 시키려 했지만
시험과목이 Custom 하게 추가 삭제가 가능하다는 전제가 있어 과목테이블(A)와 시험학생참여테이블 (D)로 분리하였습니다.
이 상황에서 기능 구현하다 문제가 생격는데요.
학생이 100명이고 국,영,수 세 과목을 수강한 경우
(D) 테이블에 100x3 의 row가 발생합니다.
쿼리를 통해 한 학생당 과목정보를 같은 Row로 빼는 것 까지는 되었지만, 문제는 데이터 수정 시
100x3의 update가 발생하는 문제가 있습니다.
혹시 현재 상황에서 update를 최소화 할 수 있는 방안이 있을까요?
동시 Update를 이리저리 검색해 보았는데 마땅히 적용할 수 있는게 없네요..
DB 설계 부터 문제가 있는 것인지요?
다르게 생각해 본 것은
그냥 (D) 시험학생참여테이블에 칼럼 갯수(시험 항목 수)를 Fix하고,
(E) 시험일자시험과목 테이블을 새로 생성하여 (D) 테이블에 연동하는 것이 어떨까하는 생각도 해봅니다 ㅡㅡ;;
2015-11-01 시험일자에 국,영,수 시험을 쳤다면,
(E) 시험일자시험과목 테이블에 국,영,수 과목에 대한 key 값을 설정하고..
(D) 테이블에 (2015-11-01),(국어점수),(영어점수),(수학점수) 형태로 들어가는 거죠.
물론 (E)와 (D) 테이블의 칼럼수가 똑같이 들어가게 될 것입니다.
보통 실무에선 위와 같은 상황 발생 시 어떤 방식으로 처리를 하나요?
update row 수가 많더라도 첫번째 방법으로 설계하는 것이 옳은 것인지 궁금합니다.
자답입니다. 맞는지 모르겠네요.
UPDATE tableName WHERE fieldValue1 IN ( A1, A2, A3 ) |
위와 같이 처리하니 한 학생에 대한 국어,영어,수학 과목의 값을 한번에 업데이트가 가능하네요.
기존에 100*3 건이 100건으로 줄어들겠군요 ....흠..
일단 이렇게 생각해 보았는데....
고수님들 더 좋은 방법이나 다른 의견 있으시면 답변 부탁드릴게요. ㅠㅠ