SQL Attendance 데이터베이스 설계
저는 현재 mariaDb에서 Meteor 앱(woth sequires orm)에서 학생들의 출석을 추적하는 데이터베이스를 설계하고 있습니다.
제 경우 예외가 거의 없기 때문에 가장 효과적인 방법은 잘 모르겠습니다.
- 교사는 원하는 대로 일정을 옮기고 재구성할 수 있습니다. 또한 학생이 각 수업(및 특정 유형의 결석)에 대해 비용을 지불하기 때문에 "결석" 방법을 사용할 수 없습니다(예: 결석만 기록하므로 기록 없음 = 있음).
- 가장 중요한 질문은 학생 1인당 출석입니다.모든 학생을 위해 앱을 열 때마다 출석률이 필요합니다.
- 두 번째로 중요한 것은 교사 1인당 월차 출석입니다.(이것은 요구에 따라 필요)
- (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
'programing' 카테고리의 다른 글
Python의 사전에 새 항목 추가 (0) | 2022.12.01 |
---|---|
display()가 C의 링크 리스트를 사용하여 큐에 세그멘테이션에러를 발생시키는 이유 (0) | 2022.12.01 |
데이터베이스 내의 모든 테이블을 하나의 스테이트먼트로 기술하려면 어떻게 해야 합니까? (0) | 2022.11.22 |
Python에서 "해시블"은 무엇을 의미합니까? (0) | 2022.11.22 |
최대 절전 모드를 사용하는 Mariadb 동적 열 (0) | 2022.11.22 |