강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

박상원님의 프로필 이미지
박상원

작성한 질문수

설계하는데 너무 어려운 내용이 있어서 질문드립니다.

작성

·

31

0

온라인 시험 앱을 만들고 있는데요.

학생들이 수능 문제를 온라인에서 푸는거라 생각하면 됩니다.

 

DB 설계를 하는데, 너무 특히 어려운게 하나가 있는데요.

 

현재 엔티티가 6개가 있는데요.

 

  1. exam (ex- 수학)

     

  2. question (ex- 수학문제)

  3. question_answer (ex- 수학 문제에 대한 답 (A, B, C, D)

  4. section (ex- 사칙연산)

  5. unit (ex- 곱셈)

  6. 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 기준으로

  1. exam (has many) section

  2. section (has many) unit

  3. unit (has many) sub_unit

  4. sub_unit (has many) question

  5. question (has many) question_answer

이렇게 했었는데요.

이게 영 아닌거 같아서요.

 

일단 restful 기준으로 보면

exam/section/unit/sub_unit/question을 가야하고,

답변을 가자면

exam/section/unit/sub_unit/question/question_answer

라고 가야하더라구요.

 

이럴땐 어떻게 해야하나요?

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 박상원님.

온라인 시험 앱의 데이터베이스 설계에 대해 고민이 많으신 것 같습니다. 기본적으로 이런 경우는 각 엔티티 간의 관계를 명확히 정하는 것이 중요합니다. 현재 주어진 요구 사항을 기준으로 설계를 좀 더 상세히 해보겠습니다.

  1. Exam 엔티티

    • Exam은 여러 Section을 가질 수 있습니다.
  2. Section 엔티티

    • Section은 여러 Unit을 가질 수 있습니다.
    • 또한 Section은 자신이 포함된 Exam에 속하도록 관계가 설정되어야 합니다.
  3. Unit 엔티티

    • Unit은 여러 SubUnit을 가질 수 있습니다.
    • 마찬가지로 Unit은 자신이 포함된 Section에 속하도록 관계가 설정되어야 합니다.
  4. SubUnit 엔티티

    • SubUnit은 여러 Question을 가질 수 있습니다.
    • SubUnit 역시 자신이 포함된 Unit에 속해야 합니다.
  5. Question 엔티티

    • Question은 여러 QuestionAnswer와 연결됩니다.
    • Question은 자신이 포함된 SubUnit에 속하도록 하고, 조회 시 QuestionAnswer까지 함께 가져올 수 있도록 설정합니다.
  6. QuestionAnswer 엔티티

    • 각 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에서는 이러한 관계를 매핑할 때 연관 관계 매핑을 활용하면 됩니다.

설계를 진행하면서 복잡도를 감안하여 비즈니스 로직과 데이터베이스 설계를 나누어 고민해보는 것도 좋은 방법입니다. 데이터가 어떻게 연결되고 조회될 것인지를 명확히 하고 접근 방식을 정리해서 진행하시면 도움이 될 것입니다.

추가적으로 질문이 있거나 구체적인 대응이 필요하신 경우, ‘문의하기’ 기능을 이용하셔서 더 자세한 지원을 받으실 수 있습니다.

계속해서 좋은 프로젝트 만드시길 바랍니다!

박상원님의 프로필 이미지
박상원

작성한 질문수

질문하기