uswLectureEvaluation/SUWIKI-Spring

강의 테이블 및 연관 테이블 재구성 (2024 2학기 전까지 :skull: )

Closed this issue · 0 comments

강의 스케줄 테이블과 semester_list ✔️

연관된 이슈와 PR : #78 #79 #80

이번에 lecture의 place_schedule(시간표) 정보를 lecture_schedule 테이블로 분리했습니다.

여러 학기에 개설된 강의들의 시간표 중복 조회 문제 💀

현재 lecture_schedule에는 학기 정보가 없는데,
문제는 이전 학기에도 열린 강의 시간표들을 조회하고 싶은 경우 과거에 열렸던 강의 시간표들도 함께 조회될 수밖에 없습니다.

가령 2022-1, 2023-1, 2024-1에 모두 열린 A 강의가 있다고 가정해보면
각각의 학기에 시간표(lecture_schedule)이 있게 됩니다.

lecture.semester_list 컬럼을 삭제하고 lecture_schedule에 semester 정보를 갖게 해야 합니다.
기존의 구조로는 가장 최근 학기가 아닌 다른 학기의 시간표 조회를 구현할 수 없습니다.
lecture_schedule을 강의의 인스턴스(개설 강의 정보)처럼 생각하면 될 듯 합니다.

우선은 기존의 강의 리스트 조회(강의 평가) 로직을 수정하지 않는 방향으로 바꾸는 중입니다.
그러나 lecture_schedule 에 semester을 저장하고 이를 활용하는 방향으로 조금씩 수정하면 좋을 것 같습니다.

  • ⚠️ 여전히 버그가 있어서 쿼리문을 수정해야 합니다. 이번 학기까지는 괜찮지만... 빨리 수정되어야 합니다.
    lecture가 아니라 lecture_schedule을 중심으로 조회되어야 합니다.
    시간표가 미정인 과목들을 보지 않거나, DTO로 조회해야 합니다.

강의 데이터 식별 기준 오류 ✔️

현재 강의의 식별 기준은 강의명, 교수명, 전공명입니다.
diclNo (분반) 도 함께 식별 조건으로 추가하는 방식으로 수정하려고 합니다.
diclNo는 같은 강의 이름을 갖고 같은 강의 코드를 가진 강의들에 대해 어떤 학부 어떤 교수에 의해 열리는지에 따라 구별하는 값으로 보입니다.

소프트웨어문해 과목이 가장 최악의 케이스인데, 강의명이 모두 같고 교수명이 모두 교양대학이고 학부명까지 같은 케이스가 있습니다. 이런 경우에 diclNo가 유일한 식별자입니다.

데이터 적재 로직이 변경될 예정입니다.

강의 데이터 적재 : 교수 미정인 강의 데이터의 올바른 수정

현재 로직으로는 USW 데이터가 업데이트될 때 미정이었던 강의들은 모두 삭제됩니다.
미정인 강의들을 시간표로 추가했던 유저들은 불편을 겪게 될 것 같습니다. (직접 교수명을 추가하거나 다시 강의 시간표를 찾고 추가해야 함)

강의가 현재 학기에 열려있는지, 미정인지, 폐강되었는지의 여부

USW 데이터를 조금 더 분석해보면 알아볼 수 있을 것 같습니다.

major_type 테이블 분리

전공 리스트 조회 API에서 강의를 조회하면서 DISTINCT로 전공명들을 가져오고 있는데, 개선해보면 좋을 것 같습니다.
데이터 중복 문제도 있기 때문에 정규화 측면에서 좋다고 생각합니다.

포털 데이터 로직 수정 -> favorite_major 테이블의 major_type도 FK로 수정
기존 데이터와 불일치할 수 있는 문제가 있는데.. 조금 더 알아보겠습니다.

강의 엔티티 책임 분리

강의의 여러 필드들을 Professor, MajorType, LectureType 등 Embedded 객체로 분리하면 좋을 것 같습니다.
그리고 LectureDetail 필드들중 Lecture와 직접적으로 관련된 필드들은 Lecture로 옮기는게 좋다고 생각합니다.
Point, Grade, EvaluateType도 객체로 분리할 수 있을 것 같습니다!