programing

SQL Attendance 데이터베이스 설계

yoursource 2022. 11. 22. 22:34
반응형

SQL Attendance 데이터베이스 설계

저는 현재 mariaDb에서 Meteor 앱(woth sequires orm)에서 학생들의 출석을 추적하는 데이터베이스를 설계하고 있습니다.

여기에 이미지 설명 입력

제 경우 예외가 거의 없기 때문에 가장 효과적인 방법은 잘 모르겠습니다.

  1. 교사는 원하는 대로 일정을 옮기고 재구성할 수 있습니다. 또한 학생이 각 수업(및 특정 유형의 결석)에 대해 비용을 지불하기 때문에 "결석" 방법을 사용할 수 없습니다(예: 결석만 기록하므로 기록 없음 = 있음).
  2. 가장 중요한 질문은 학생 1인당 출석입니다.모든 학생을 위해 앱을 열 때마다 출석률이 필요합니다.
  3. 두 번째로 중요한 것은 교사 1인당 월차 출석입니다.(이것은 요구에 따라 필요)
  4. (db 관련 없음) 10명 그룹별로 학생의 존재 여부를 추적해야 합니다(다시 지불해야 하는 모든 수업).

초임은 교사 20명, 학생 250명, 출석자수 500명, 출석자수(학생 1명당 2회 수업) 37주(최대 2회 수업)입니다.

20000행 테이블에서 250개의 쿼리(검색)를 실행하는 데 시간이 걸립니까?

출석이 기록될 때마다 갱신되는 leason_counter 필드가 학생 테이블에 있는 것이 좋은 생각일까요?

감사합니다!

갱신:

최적화가 이루어질 가능성이 있는가?이는 학생과 교사 모두에게 가능한 이메일 및 청구서 시스템의 기반이 되어야 합니다.

설계에는 여러 가지 개선 사항이 있을 수 있습니다.구체적인 질문에 대한 답변부터 시작하겠습니다.

20000행 테이블에서 250개의 쿼리(검색)를 실행하는 데 시간이 걸립니까?

아니요. 최신 하드웨어에서는 20.000 행을 빠르게 조회할 수 있습니다.적절한 인덱싱 전략이 있는 경우 쿼리는 10초 후에 반환됩니다.

출석이 기록될 때마다 갱신되는 leason_counter 필드가 학생 테이블에 있는 것이 좋은 생각일까요?

아니요, 이는 좋지 않은 생각입니다.각 학생의 레슨에 출석한 시간과 결석한 시간을 나타내는 보고서를 원한다는 가정 하에 데이터를 저장해야 합니다.카운터를 유지하는 것은 그 정보를 복제하는 것입니다.

저는 다음과 같은 디자인을 제안합니다.

"출석"과 "출석"은 논리적으로 별개의 것으로, 플래그가 있는 단일 테이블에서 모델링할 수 있습니다.비즈니스 도메인에서 다른 속성(부재에는 이유 코드가 있음) 및 잠재적으로 다른 동작(예: 부재에는 이메일을 보내기 위한 워크플로우가 있음)을 가진 다른 것으로 보기 때문에 이들을 별도로 모델링했습니다.나는 논리적으로 분리된 것을 다른 테이블로 하는 것을 선호한다.

Student
-------
student_id
name
...

Lesson
------
lesson_id
subject
teacher_id (if only one teacher can teach a lesson)
....

enrollment
---------
lesson_id
student_id
start_datetime (or you might have the concept of "term")
end_datetime

lesson_session
-------
lesson_session_id
lesson_id
start_datetime
end_datetime
location
teacher_id (in case more than one teacher can teach a lesson)


attendance
--------
lesson_session_id
student_id

absence
------------
lesson_session_id
student_id
reason (or might be a foreign key to reasons table)

언급URL : https://stackoverflow.com/questions/57089768/sql-attendance-database-design

반응형