728x90
320x100
1. 데이터베이스 설계
- 설계는 https://aquerytool.com/ 사이트를 이용하여 생성하였다.
- 추가로 '학생(=회원)' 테이블도 생성하였는데 에이쿼리툴은 테이블 5개까지가 무료라서 일단 5개만 만들고 회원 테이블은 따로 생성했다;
[각 테이블 톧아보기]
학생(회원)테이블
- 흔한 회원테이블과 비슷하게 아이디 / 닉네임 / 비밀번호 / 가입일 / 마지막정보수정일 / 사용여부 컬럼을 만들어 두었다.
- 회원탈퇴나 삭제시 논리 삭제를 하기 위해 사용여부를 사용하였다.
학과테이블
- 일단은 내가 속해있는 컴퓨터과학과의 기출문제만 관리를 할 예정이지만 나중에는 다른 학과로도 넓힐 수도 있으니 학과 테이블을 따로 만들어 관리하기로 했다.
- 기본키인 학과아이디는 대문자 알파벳으로 하기로 했고, 역시 논리삭제를 위해 사용여부 컬럼을 사용하였다.
과목테이블
- 기본키인 과목아이디는 학과코드(대문자알파벳) + 세자리 순번의 조합으로 생성하기로 했다.
- 역시나 논리삭제를 사용함으로 사용여부 컬럼을 사용하였다.
시험테이블
- 시험 테이블의 기본키는 시험아이디인데 과목아이디 + 년도 + 학년 + 학기 + 시험구분의 조합으로 총 11자리로 생성하여 만들기로 하였다.
- 과목 아이디는 과목테이블의 과목아이디를 외래키로 사용한다.
- 시험구분은 기출문제에 동계, 하계, 기말시험의 구분을 두기 위해 생성하였고 숫자 1자리로 생성한다.
- 역시나 논리 삭제를 위해 사용여부 컬럼을 사용하였다.
시험응시기록 테이블
- 학생이 시험본 기록을 저장하기 위한 테이블.
- 문제번호와 응답번호를 열의 형태로 저장하기로 했는데 여기서 고민이 됐던 부분은
- 지금 데이터베이스 구조대로라면 한 사람이 기출문제 1세트를 풀면 총 35개(35문제라서...)의 row가 생성된다. 데이터베이스가 이걸 감당할 수 있는가. (물론 추후 배치작업을 통해 CBT사이트처럼 기록을 일주일이나 이주정도만 보관하는 방식을 사용할 것 같긴하다.) 즉, 행이 길어지나 열이 길어지냐인데 나는 일단 행이 길어지는 걸 선택했지만....추후 어떻게 될 지는 모르겠다.
- 점수를 따로 저장하지 않고 매번 문제테이블과 조인하여 점수를 매겨야 하는데 이게 과연 효율적인가. 아니면 점수테이블을 따로 만들어서 데이터베이스화 해야 하는가.
2. 테이블 생성
- 에이쿼리툴에서 바로 SQL 생성문을 뽑아낼 수 있어서 이렇게 설계하고 생성문 뽑아서 테이블을 모두 생성해주었다.
3. 더미데이터 추가
- 테이블마다 하나씩의 더미데이터를 넣어두었다.
728x90
320x100
'💻 뚝딱뚝딱 > 방통대CBT' 카테고리의 다른 글
[개발일지#005] 시험풀기 화면 구현 (레이아웃, 안푼문제, 소요시간 등) (0) | 2024.06.20 |
---|---|
[개발일지#004] 기출문제 목록조회 (검색조회 및 페이지네이션 포함) (0) | 2024.06.18 |
[개발일지#003] 기본 부트스트랩 적용 / 기출문제 전체조회 구현 (0) | 2024.06.07 |
[개발일지#002] 스프링 프로젝트 생성 및 Mybatis 연결 (0) | 2024.06.07 |
[개발일지#000] 방통대CBT 제작계기 & 사용기술스택 & 요구사항 (0) | 2024.06.05 |