작성
·
31
0
온라인 시험 앱을 만들고 있는데요.
학생들이 수능 문제를 온라인에서 푸는거라 생각하면 됩니다.
DB 설계를 하는데, 너무 특히 어려운게 하나가 있는데요.
현재 엔티티가 6개가 있는데요.
exam (ex- 수학)
question (ex- 수학문제)
question_answer (ex- 수학 문제에 대한 답 (A, B, C, D)
section (ex- 사칙연산)
unit (ex- 곱셈)
sub_unit (ex- 음수 끼리의 곱셈)
이걸 관계를 어떻게 해야할지 모르겠습니다.
주요 사항은 아래와 같습니다.
(1) 사용자는 exam별 question을 조회할 수 있다.
(2) 사용자는 exam별 특정 section에 속하는 question을 조회할 수 있다.
(3) 사용자는 exam별 특정 unit에 속하는 question을 조회할 수 있다.
(4) 사용자는 exam별 특정 sub-unit에 속하는 question을 조회할 수 있다.
(5) question을 조회하면 question_answer가 함께 조회된다.
(6) 총 과목은 6개이다. (국, 영, 수, 사, 과)
최초에는 ORM 기준으로
exam (has many) section
section (has many) unit
unit (has many) sub_unit
sub_unit (has many) question
question (has many) question_answer
이렇게 했었는데요.
이게 영 아닌거 같아서요.
일단 restful 기준으로 보면
exam/section/unit/sub_unit/question을 가야하고,
답변을 가자면
exam/section/unit/sub_unit/question/question_answer
라고 가야하더라구요.
이럴땐 어떻게 해야하나요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 박상원님.
온라인 시험 앱의 데이터베이스 설계에 대해 고민이 많으신 것 같습니다. 기본적으로 이런 경우는 각 엔티티 간의 관계를 명확히 정하는 것이 중요합니다. 현재 주어진 요구 사항을 기준으로 설계를 좀 더 상세히 해보겠습니다.
Exam 엔티티
Section 엔티티
Unit 엔티티
SubUnit 엔티티
Question 엔티티
QuestionAnswer 엔티티
주어진 요구 사항을 바탕으로 하면, 설계하신 것처럼 RESTful API로 설계 시 각 계층의 리소스는 다음과 같은 URL로 접근할 수 있습니다:
GET /exams
GET /exams/{examId}/sections
GET /sections/{sectionId}/units
GET /units/{unitId}/sub_units
GET /sub_units/{subUnitId}/questions
GET /questions/{questionId}/question_answers
이와 같이 계층적인 접근 방식으로 관계를 설정하면 논리적으로 연결된 데이터 구조를 유지할 수 있습니다. ORM에서는 이러한 관계를 매핑할 때 연관 관계 매핑을 활용하면 됩니다.
설계를 진행하면서 복잡도를 감안하여 비즈니스 로직과 데이터베이스 설계를 나누어 고민해보는 것도 좋은 방법입니다. 데이터가 어떻게 연결되고 조회될 것인지를 명확히 하고 접근 방식을 정리해서 진행하시면 도움이 될 것입니다.
추가적으로 질문이 있거나 구체적인 대응이 필요하신 경우, ‘문의하기’ 기능을 이용하셔서 더 자세한 지원을 받으실 수 있습니다.
계속해서 좋은 프로젝트 만드시길 바랍니다!