안녕하세요!
초짜가 하려니 맨땅에 열심히 헤딩중 입니다...
TEST란 테이블이 있고 기본 정보에 20여개의 필드가 있습니다.
문제는 이 20여개의 필드에 들어가는 값들이 정확하게 매칭되지 않습니다.
무슨 얘기냐면....
NO 이름 학번 학기 계열1 과목명1 학점1 평점1 계열2 과목명2 학점2 평점2 계열3 과목명3 학점3 평점3 .......계열20 등등
1 홍길동 123 1학기 인문 국어 3 4.2 자연 과학2 2 3.2 자연 물리2 3 4.4
2 김철수 124 1학기 인문 영어 3 3.4 인문 사회1 3 3.6 인문 지리2 3 3.1 ..
...............
위의 값들이 있습니다.
학생들마다 앞에 이름, 학번, 학기까지는 공통으로 들어가지만 그 다름부터는,
계열0, 과목명0, 학점0, 평점0, 계열1, 과목명1, 학점1, 평점1, 계열2, 과목명2, 학점2, 평점2,.... 이렇게 해서 20까지 증가가 됩니다.
또한 홍길동이란 학생이 계열0에 국어 과목이 입력됬다고 해서 철수가 계열0에 국어가 꼭 입력되지는 않습니다.
왜냐면 모든 학생이 듣는 과목 수가 다르다 보니 위의 과목필드가 0~20까지 있다고 하면
각각의 필드에 학생들의 입력되는 과목은 모두 다를 수 밖에 없습니다.
이러다보니 문제점이 검색이나 조건 쿼리를 할때 필드명을 정확히 알수가 없습니다.
예를 들어 국어선생이 이번학기에 국어과목을 수강하는 학생을 찾을 경우...
각 학생의 국어 값이 들어있는 필드명이 모두 달라 어떻개 검색을 해야 될지 모르겠습니다.
입력되는 값으로 필드명을 찾아야 된다는 얘긴데 어떻게 할 수 있을까요..
조언좀 부탁드립니다.
감사합니다.
Comment 4
-
건우아빠
2013.12.06 22:19
-
dolphine
2013.12.09 10:28
조언 감사합니다.
-
항해자™
2013.12.07 02:35
설계 자체를 잘 못 하셨네요,,, 과목이 늘어나면 어떻게 할 건가요??
학생 기본 정보 테이블과 수강하는 과목에 관련한 테이블을 따로 만들어야죠,,,
과목코드를 만들고 컬럼을 횡으로 늘어 뜨리는게 아니라 row 로 쌓이게 해야 합니다,,, -
dolphine
2013.12.09 10:29
네....지난 주말에 한참 고민했는데....
설계 자체가 잘못 된듯 하여 지금 다시 고민하고 있습니다.
컬럼이 횡으로 늘어나는건 답이 없겠더라구요.
감사합니다.
등록만 편하게 구성하고 나중 문제는 별로 고려를 안한듯 합니다.
엑셀로 작업 하다가 그걸보고 프로그램으로 구현한 내용 같다는 느낌이 많이 듭니다.
1. 트리거를 이용해서 별도의 테이블로 자료를 자동으로 처리하는 방법
- 별도의 조회는 새롭게 구성된 테이블을 가지고 작업
no /이름/학번/학기/구분/계열/과목명/학점/평점
테이블의 트리거를 통해서 별도의 구성된 테이블로 분리해서 들어가도록 구성을 하시는겁니다.
2. unpivot 을 이용해서 (no /이름/학번/학기/구분/계열/과목명/학점/평점 ) 으로 분리하신다음 조회하고
니온 결과의 no 번호를 기존 테이블에서 검색하시는 방법....
1번도 2번 쿼리를 이용해서 처리하시면 될듯 합니다.
1번이 인덱스를 구성할수 있어 속도가 훨씬 빠를 듯하네요.
unpivot이 복잡하면 그냥 union 으로 각 컬럼을 분리하셔도 될듯 합니다..