본문 바로가기
💻 뚝딱뚝딱/방통대CBT

[개발일지#001] 데이터베이스 설계 및 생성

by 뚜루리 2024. 6. 6.
728x90
320x100

 

 

1. 데이터베이스 설계

  • 설계는 https://aquerytool.com/ 사이트를 이용하여 생성하였다. 
  • 추가로 '학생(=회원)' 테이블도 생성하였는데 에이쿼리툴은 테이블 5개까지가 무료라서 일단 5개만 만들고 회원 테이블은 따로 생성했다;

 

[각 테이블 톧아보기]

학생(회원)테이블

  • 흔한 회원테이블과 비슷하게 아이디 / 닉네임 / 비밀번호 / 가입일 / 마지막정보수정일 / 사용여부 컬럼을 만들어 두었다.
  • 회원탈퇴나 삭제시 논리 삭제를 하기 위해 사용여부를 사용하였다.

 

학과테이블

  • 일단은 내가 속해있는 컴퓨터과학과의 기출문제만 관리를 할 예정이지만 나중에는 다른 학과로도 넓힐 수도 있으니 학과 테이블을 따로 만들어 관리하기로 했다.
  • 기본키인 학과아이디는 대문자 알파벳으로 하기로 했고, 역시 논리삭제를 위해 사용여부 컬럼을 사용하였다. 

 

 

과목테이블

  • 기본키인 과목아이디는 학과코드(대문자알파벳) + 세자리 순번의 조합으로 생성하기로 했다. 
  • 역시나 논리삭제를 사용함으로 사용여부 컬럼을 사용하였다. 

 

시험테이블

  • 시험 테이블의 기본키는 시험아이디인데 과목아이디 + 년도 + 학년 + 학기 + 시험구분의 조합으로 총 11자리로 생성하여 만들기로 하였다.
  • 과목 아이디는 과목테이블의 과목아이디를 외래키로 사용한다. 
  • 시험구분은 기출문제에 동계, 하계, 기말시험의 구분을 두기 위해 생성하였고 숫자 1자리로 생성한다. 
  • 역시나 논리 삭제를 위해 사용여부 컬럼을 사용하였다. 

 

시험응시기록 테이블

  • 학생이 시험본 기록을 저장하기 위한 테이블.
  • 문제번호와 응답번호를 열의 형태로 저장하기로 했는데 여기서 고민이 됐던 부분은
  1. 지금 데이터베이스 구조대로라면 한 사람이 기출문제 1세트를 풀면 총 35개(35문제라서...)의 row가 생성된다. 데이터베이스가 이걸 감당할 수 있는가. (물론 추후 배치작업을 통해 CBT사이트처럼 기록을 일주일이나 이주정도만 보관하는 방식을 사용할 것 같긴하다.) 즉, 행이 길어지나 열이 길어지냐인데 나는 일단 행이 길어지는 걸 선택했지만....추후 어떻게 될 지는 모르겠다.
  2. 점수를 따로 저장하지 않고 매번 문제테이블과 조인하여 점수를 매겨야 하는데 이게 과연 효율적인가. 아니면 점수테이블을 따로 만들어서 데이터베이스화 해야 하는가. 

 

 


 

 

2. 테이블 생성

  • 에이쿼리툴에서 바로 SQL 생성문을 뽑아낼 수 있어서 이렇게 설계하고 생성문 뽑아서 테이블을 모두 생성해주었다.

 

3. 더미데이터 추가

  • 테이블마다 하나씩의 더미데이터를 넣어두었다.
728x90
320x100