SQL

데이터베이스 실습 일지&후기

https.. 2024. 1. 27. 23:50

일시: 2023.11.07.~12.10
팀원: 나, 팀원1, 팀원2
일지명: 데이터베이스 MySQL 실습
 

11/7~13
- 테이블과 인스턴스 생성(course, department, professor, student)

00대학교 데이터베이스를 구축하였다.
데이터베이스 이름은 ‘univ‘로 하였고 추후 생성한 네 개의 테이블을 저장하였다.
처음, 외래키를 선언하지 않고 실행을 하여 테이블 삭제를 반복한 후 외래키를 선언하고 다시 실행시켰다. 처음 생성한 student 테이블부터 생성하려고 하니 오류가 발생했다. 외래키를 고려하지 않은 것을 깨달아 외래키가 존재하지 않는 course, department, dnum 열을 참조하는 외래키 belong이 존재하는 professor, pnum과 dnum을 참조하는 외래키 advise, major가 존재하는 student 테이블 순서로 실행을 시켜 테이블 생성을 완료했다.
 
각 테이블에 유의미한 인스턴스를 부여하기 위해 학교 홈페이지에서 교수진, 건물번호, 과목명 등을 조사해 데이터 삽입을 위한 준비를 마쳤다. 이후 역할분담을 하여 student 데이블은 (팀원1), department, professor 테이블은 (나), course 테이블은 (팀원2)가 담당했다. 인스턴스 생성은 주말까지 모두 완료하였다.
 

11/14~20
- 오류 해결, 11주 차의 query 문제 풀이, 테이블과 인스턴스 생성(enrol, lecture)
 
학교에서 Workbench에서 실행을 시켜보았다. 오류가 발생할 거라 생각하지 못해 검토를 하지 않았었는데 끊임없는 오류가 발생했다. 이 때문에 강의 시간에 주어진 쿼리 문제를 풀어보지 못하고 오류 잡는 것에 매진하였다. 우선에서 넘겨받은 insert문에 쉼표와 세미콜론 등이 정의되지 않아 이를 모두 수정하였고, 중복된 값이 존재하거나 잘못 정의된 값이 있어 바로 수정 후 강의 시간에 새로운 enrol, lecture 테이블을 생성하였다.
 
11주 차에 주어진 query 문제를 풀어보았다. “1번 00과 3학년 학생의 수를 보이시오” 문제에서, 00과에 부여한 dnum의 값인 22로 쿼리를 풀어 아래의 쿼리가 완성되었는데, dname을 ‘00’로 조회해야 한다는 것을 뒤늦게 알아챘다.
SELECT COUNT(*)
FROM STUDENT
WHERE MAJOR = 22 AND YEAR = 3;
이와 같이 11주 query “2번 유승언 교수의 지도 학생 이름과 평점을 보이시오“ 도 마찬가지로 advise를 2287로 두고 문제를 풀었는데 dname을 이용해 교수의 이름을 직접 조회하는 것으로 수정하였다. 생성한 인스턴스를 모두 외우고 있지 않은 한 이런 검색 방식이 불가능하다는 것을 미처 알아차리지 못하여 발생한 것이었다. 5문제 중 4번을 제외하고 모두 풀이를 완료하였다.
 
새로 생성한 테이블의 인스턴스 값은 5개의 학과를 2개, 2개, 1개로 분담을 하여 생성하기로 하였고, enrol테이블의 grade값이, 초반에 만들었던 student의 qpa값에 맞게 부여되도록 특히 신경을 썼다. lecture 테이블 역시 강의실과 강의 시간이 겹치지 않도록 학년별, 과목별 나누어 부여하였다.
 
enrol 테이블의 인스턴스를 생성하는 데 값을 올바르게 넣었는지, 강의 시간에 피드백 주신 내용에 대해 물어보기 위해 교수님께 쪽지를 드렸고, QPA값이 3.5이면, enrol의 grade값을 A, B+, B에 해당하는 점수 95, 86, 79로 넣으면 되는 것인지 확인을 받았으며, “pphone 값을 pnum과 같이 하면 좋다“는 권고대로 pphone의 기존 값이었던 교수 연구실 번호 뒷자리를 모두 수정하여 pnum과 같게 하였다.
 
 
11/21~28
- 오류 해결, 12주 차 query 문제 풀이
 
생성한 인스턴스를 Workbench에서 실행시켜 보았는데 역시 오류가 발생했다. 인스턴스 생성을 할 때 값을 한 번에 잘 넣어야 한다는 것을 뼈저리게 느끼는 순간이었다. 주로 발생한 enrol의 cnum에서 학년이 중복되어 들어간 경우, 학생의 반이 중복된 경우였다. 값을 하나씩 비교 후 빠르게 수정할 수 있었다.
 
강의시간에 주어진 12주 차 query를 풀어보았다. 10번을 제외하고 풀이를 완료하였으며, 11주 차 4번 query와 비슷한 유형인 10번은 나중에 풀어보기로 미루었다. 12주 차 query의 경우 3번 “각 교수의 이름과 지도 학생 수를 보이시오” 문제에서 지도 학생이 없는 교수의 학생 수가 0이 나오는 query와, 지도 학생이 없는 교수는 나오지 않는 2가지 방법으로 풀이 후 어느 것이 맞는지 한참 고민을 했다. 검토 후 각 교수의 이름 즉, 모든 교수들이 보여야 하는 것으로 카운트 0이 포함된 query로 문제를 풀었다. 문제 풀이 전, 지문의 이해가 우선되어야 했다.
 
 
11/2~12/5
- 11주 차, 12주 차 query 마무리, 조 별 query 문제 만들기 시작
 
각 조 별로 주어진 10문제의 query를 만들기 시작했다. “화요일에 수업이 있는 학생을 보이시오.” 화요일은 time으로 integer(2)에서, 첫 번째 자리가 2로 시작하는 값이다. 문자열 패턴과 동일하게 LIKE 연산자를 사용하여 '2_%';와 view 문제 LIKE '23_%'; 에 적용하였다. 실행 결과는 나오지만 LIKE 연산자는 문자열 패턴에 사용되는 것이고 데이터 타입이 문자열(varchar)이 되어야 하기 때문에 integer에는 사용되지 않는 것 같아 다른 view와 query를 만들기로 하였다.
 
미뤄두었던 11주 차 query의 4번, 12주 차 query의 10번을 풀어보았다. 4번은 view 생성 없이 풀어보고자 했으나 도저히 풀리지 않아 view 생성 후 문제를 풀었다. 이 문제들을 푸는 데 있어 가장 어려움을 겪은 것은 평균을 구하고 그 평균으로 가장 높은 값을 구하는 것이었다. view를 생성하지 않고 풀기 위해 하루를 잡아먹은 문제를 view 생성 후 MAX 함수를 사용하니 금방 풀 수 있었다.
 

12/6~10
- 조 별 query 완성, PPT와 대본 작성
 
10개 중 남은 3개의 query를 만들었다. query를 재검토하고, 8일, Workbench에서 실행하는 모든 것을 마쳤다. 총 4개의 view가 생성되었고, 2개의 2단계 view를 만들었다. view의 생성에 어려움은 없었지만 이를 어떻게 활용할지 정하는 것에 많은 고민이 필요했다.
 

역할 분담
- 다이어그램 작성: 나
- 테이블 생성: 나
- 인스턴스 생성: 나, 팀원1, 팀원2
- 쿼리 작성: 나
- 실습일지 작성: 나
- PT 자료 만들기: 팀원1, 팀원2
 
 
 
[실습 후기] - 친구들 것은 생략
주어진 과제를 수행하며 많은 것을 배울 수 있었습니다. 지난 학기에 배운 이론적인 내용이 얼마나 중요한지 느낄 수 있었고 막연히 어렵게만 느껴지던 쿼리와 친숙해지는 시간이 되었습니다. 쿼리에 대한 이해도를 높일 수 있었습니다. 저희 팀이 테이블의 인스턴스 값을 넣을 때 중복된 값으로 인한 오류가 정말 많이 발생하여 초반에 어려움을 겪었습니다. 이때 값을 생성하면서 단위 별로 나누어 메모를 해둔 것을 참고해 값을 비교하며 효율적으로 수정할 수 있었습니다. 기록이 없었더라면 더 많은 시간이 들었을 것 같아서 이 점은 칭찬해 주고 싶습니다. 한편으로는 인스턴스 생성에 대한 역할 분담을 학과별로 나누는 것이 아닌 테이블별로 나누었더라면 여러 오류가 발생하지 않지 않았을까, 테이블별 일괄된 오류를 식별하고 해결하는 것이 더 수월하지 않았을까 하는 생각이 들기도 합니다. 이런 과정을 통해 인스턴스가 전반적인 작업에 많은 영향을 미치기 때문에 처음 값을 생성할 때 완벽하게 설정하는 것이 중요하다는 것을 알게 되었습니다. 삭제와 실행을 반복하지 않기 위해 워크벤치에 실행 전 충분한 검토가 필요하다는 것을 느꼈습니다. 쿼리를 작성하는 과정에서 팀원들과의 소통을 통해 다양한 의견을 주고받으며 프로젝트를 완성해 나갈 수 있었습니다. 특히, 쿼리 생성과 관련하여 어떤 문제가 좋은 문제일지, 생성한 뷰를 어떻게 활용하는 것이 좋을지에 대한 고민이 많았는데 각자가 가진 아이디어를 나누고, 문제에 대한 해결책을 함께 찾아나갔습니다. 실습에 많은 시간을 쏟아 나름 만족스러운 결과가 나온 것 같습니다. 데이터베이스 실습을 혼자서는 해내지 못했을 것입니다. 함께해 준 팀원들이 있어 고맙고 다행이라고 생각합니다. 협업과 역할 분담에 대한 중요성을 다시금 깨닫게 되는 계기가 되었고 각자가 맡은 역할을 수행함으로써 팀의 성과를 높일 수 있다는 것을 배웠습니다. 데이터베이스가 프로그램 개발에 꼭 필요한 과목이라고 들었습니다. 제게 이 분야의 역량과 지식을 키워준 고마운 시간이었습니다. 중요한 과목을 이렇게 마칠 수 있어 매우 뿌듯하고 내년 캡스톤 졸업 작품에 배운 내용을 잘 적용시킬 수 있을 것 같아 기대가 됩니다.
 
--- 위의 것은 과제로 제출한 실습 후기이다.

'SQL' 카테고리의 다른 글

MySQL 설치하기  (0) 2024.02.05
데이터베이스 쿼리 작성  (0) 2024.01.27
데이터베이스 인스턴스 생성  (0) 2024.01.27
데이터베이스 테이블 생성  (0) 2024.01.27
데이터베이스 E-R 다이어그램 작성  (0) 2024.01.26