설계하는데 너무 어려운 내용이 있어서 질문드립니다.
41
작성한 질문수 22
온라인 시험 앱을 만들고 있는데요.
학생들이 수능 문제를 온라인에서 푸는거라 생각하면 됩니다.
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 엔티티
- Exam은 여러 Section을 가질 수 있습니다.
- Exam은 여러 Section을 가질 수 있습니다.
Section 엔티티
- Section은 여러 Unit을 가질 수 있습니다.
- 또한 Section은 자신이 포함된 Exam에 속하도록 관계가 설정되어야 합니다.
- Section은 여러 Unit을 가질 수 있습니다.
Unit 엔티티
- Unit은 여러 SubUnit을 가질 수 있습니다.
- 마찬가지로 Unit은 자신이 포함된 Section에 속하도록 관계가 설정되어야 합니다.
- Unit은 여러 SubUnit을 가질 수 있습니다.
SubUnit 엔티티
- SubUnit은 여러 Question을 가질 수 있습니다.
- SubUnit 역시 자신이 포함된 Unit에 속해야 합니다.
- SubUnit은 여러 Question을 가질 수 있습니다.
Question 엔티티
- Question은 여러 QuestionAnswer와 연결됩니다.
- Question은 자신이 포함된 SubUnit에 속하도록 하고, 조회 시 QuestionAnswer까지 함께 가져올 수 있도록 설정합니다.
- Question은 여러 QuestionAnswer와 연결됩니다.
QuestionAnswer 엔티티
- 각 Question에 연결된 여러 답변을 가집니다.
- 각 Question에 연결된 여러 답변을 가집니다.
주어진 요구 사항을 바탕으로 하면, 설계하신 것처럼 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에서는 이러한 관계를 매핑할 때 연관 관계 매핑을 활용하면 됩니다.
설계를 진행하면서 복잡도를 감안하여 비즈니스 로직과 데이터베이스 설계를 나누어 고민해보는 것도 좋은 방법입니다. 데이터가 어떻게 연결되고 조회될 것인지를 명확히 하고 접근 방식을 정리해서 진행하시면 도움이 될 것입니다.
추가적으로 질문이 있거나 구체적인 대응이 필요하신 경우, ‘문의하기’ 기능을 이용하셔서 더 자세한 지원을 받으실 수 있습니다.
계속해서 좋은 프로젝트 만드시길 바랍니다!
백준 서비스 종료
9
839
1
강의 추천해주세요
2
20
1
구글 폼 작성 완료!
1
33
1
시험 시작하기 전에 한 가지 질문 있습니다.
1
44
2





