Mô hình dữ liệu đầy đủ: thực thể JSON, quan hệ và bản thể học
Trang này mô tả mô hình dữ liệu đầy đủ của một tài khoản Omniscol: các thực thể, những trường chính của chúng và các quan hệ giữa chúng. Trang này nối tiếp trang khái niệm Tổ chức dữ liệu, vốn giải thích tại sao (dữ liệu gốc của trường ↔ thời khóa biểu, bản sao cục bộ); ở đây, mục tiêu là cái gì — một bản đồ cấu trúc dùng được ngay, nhất là để đối chiếu mô hình với một hệ thống dữ liệu gốc bên ngoài (phần mềm quản trị, danh bạ, hệ thống thông tin).
Trang kỹ thuật. Tài liệu tham chiếu này dành cho việc tích hợp và ghép nối với một hệ thống bên ngoài. Nó không cần thiết cho việc dùng Omniscol hằng ngày: để hiểu cách dữ liệu được tổ chức về mặt nghiệp vụ, xem Tổ chức dữ liệu.
Toàn bộ dữ liệu của một cơ sở giáo dục được tổ chức thành một cây. Các thực thể mô tả bên dưới (người dùng, năm học, thời khóa biểu, vắng mặt, sự kiện, v.v.) tương ứng với các nhánh khác nhau của cấu trúc này. Tham chiếu chuẩn tắc là lược đồ JSON của tài khoản. Có thể xem lược đồ này dưới hai dạng:
- nguồn thô (chính lược đồ JSON), do tài khoản phục vụ tại địa chỉ
https://api.omniscol.com/api/guest/school_schema.json; - trình xem dạng cây dễ đọc tại omniscol.com/vi/datamodel (và tài liệu tham chiếu API tương ứng tại omniscol.com/vi/developers).
Lược đồ này mô tả chính xác cách lưu trữ vật lý trong cơ sở dữ liệu, dưới dạng một tài liệu JSON. Trang này trình bày lại lược đồ đó một cách có tổ chức và ổn định theo thời gian.
Tài liệu trường: phần gốc
Tài liệu gốc tập hợp dữ liệu gốc lâu dài của cơ sở giáo dục cùng toàn bộ các kế hoạch của nó. Các nhánh con ở cấp một:
| Khóa gốc | Thực thể | Vai trò |
|---|---|---|
config |
SchoolConfig |
Thông số của tài khoản (quốc gia, tùy chọn, múi giờ, đồng bộ với hệ thống bên ngoài) |
subjects_custom |
từ điển các SubjectFull |
Môn học tùy chỉnh của trường |
families_custom |
từ điển các Family |
Nhóm môn học tùy chỉnh |
users |
từ điển các User |
Danh bạ người dùng (mọi vai trò) |
school_years |
mảng các SchoolYear |
Năm học và ngày nghỉ lễ |
timetables |
từ điển các Timetable |
Các thời khóa biểu |
absences |
tập hợp các Absence* |
Vắng mặt (giáo viên, lớp, nhân viên, học sinh) |
staffing |
Staffing |
Mô-đun thành viên nhân sự và công tác quản sinh |
panels |
từ điển các Panel |
Bảng thông tin |
events |
từ điển các Event |
Sự kiện dạng lịch |
api, snapshots, jobs, translations, logo |
khác | Thông số kỹ thuật và lịch sử |
Những nhánh con được gọi là “từ điển” là các đối tượng JSON mà khóa của chúng là các định danh ổn định (đây là trục của mọi phép đối chiếu với bên ngoài — xem phần cuối).
Trường dùng chung: _extids và wishes
Hai trường xuất hiện trên rất nhiều thực thể. Để khỏi lặp lại chúng trong từng lược đồ, chúng được mô tả một lần duy nhất ở đây.
_extids(ExternalIds) — bảng định danh của thực thể trong các hệ thống bên ngoài, ví dụ{ "auriga": "12345" }. Có mặt trên những thực thể đồng bộ được (môn học, nhóm môn học, người dùng, cơ sở, phòng học, tài nguyên, giáo viên, lớp, nhóm…). Đây là điểm neo để ghép nối với một hệ thống dữ liệu gốc bên ngoài (xem phần cuối).wishes— ràng buộc thời gian: thời gian rảnh, khung giờ mong muốn hoặc cần tránh, khối lượng giờ tối đa, phòng học ưa thích… Có mặt trên phần lớn thực thể xếp lịch được: người dùng, giáo viên và môn học của một thời khóa biểu, nhóm, lớp, phòng học, dải giờ của cơ sở, lưới nhân sự. Tùy phạm vi, những ràng buộc này mang tính tổng thể (cấp trường) hoặc riêng cho một thời khóa biểu.
Cấp 1 — Dữ liệu gốc của trường
Dữ liệu gốc của trường chứa những gì đúng với cơ sở giáo dục, độc lập với mọi thời khóa biểu: danh mục môn học, danh bạ người dùng, lịch các năm học.
Môn học — SubjectFull / Subject / Family
Một môn học tùy chỉnh (SubjectFull) mở rộng môn học cơ sở
(Subject: name, short, code, type, _extids) bằng parent,
family và color. Ở cấp trường có hai nguồn gốc cùng tồn tại: các
môn học chung của quốc gia (chỉ đọc) và các môn học tùy chỉnh
của cơ sở giáo dục. Chi tiết về mặt nghiệp vụ:
Quản lý môn học.
Người dùng — User (bao gồm cả giáo viên)
User là thực thể duy nhất của danh bạ: nhân thân (họ, tên,
idnumber, liên hệ), xác thực (login), roles, giờ làm việc tham
chiếu (servicehours), thời gian rảnh tổng thể (trường wishes) và placements.
Giáo viên không phải một thực thể riêng: đó là một User có
teacher trong roles của mình (một người dùng có thể kiêm nhiều vai
trò). Trường placements (đánh chỉ mục theo năm học) gắn một học
sinh vào một class và những groups trong một khoảng thời gian.
Chi tiết: Quản lý giáo viên.
Năm học — SchoolYear / Holiday
SchoolYear xác định date_start → date_end, danh sách holidays và
các altweeks (tuần luân phiên). Đây là một khung thời gian, không
phải một vật chứa: các thời khóa biểu trải ra trên đó chứ không lồng vào
trong đó. Xem Năm học.
Cấp 2 — Thời khóa biểu
Timetable là một đơn vị lập kế hoạch nhất quán. Nó mang bản sao cục bộ
của riêng mình về giáo viên, lớp, nhóm và môn học — xem nguyên tắc bản
sao cục bộ trong Tổ chức dữ liệu.
Cấu hình — TimetableConfig
Trường quyết định là type: week (lặp lại hằng tuần), cycle (chu kỳ
nhiều ngày, xem cycle) hoặc calendar (ngày thực, xem dates).
time_period và time_unit xác định khung xương của lưới; weekdays
xác định ngày làm việc; date_windows xác định các cửa sổ ràng buộc cho
việc tạo tự động.
Cơ sở, phòng học, tài nguyên
Một TimetableSite (cơ sở) chứa các classrooms của nó
(TimetableClassroom: capacity, specialisation, maxclasses,
building) và các resources của nó (TimetableResource: number =
số lượng sẵn có, mà hệ thống bảo đảm không bị đặt vượt mức).
distances mô hình hóa thời gian di chuyển giữa các cơ sở. Xem
Cơ sở, phòng học và tài nguyên và
Chuyên ngành phòng học.
Giáo viên của thời khóa biểu — TimetableTeacher
Bản sao một phần được bổ sung thêm của một User: chỉ vài trường nhận
dạng được chép lại (first_name, last_name, idnumber), kèm theo
những trường riêng cho việc lập kế hoạch (servicehours ghi đè được,
classroom ưa thích, wishes theo từng thời khóa biểu). virtual_name
khác rỗng biểu thị một giáo viên ảo (vị trí còn trống, không có
User thật đứng sau).
Lớp, môn học của lớp, nhóm
TimetableClass:name,level,campus/sites,studentsnb, và ba nhánh con chủ chốt —subjects,groups,lessons.TimetableClassSubject: bản sao cục bộ của một môn học (mở rộngSubject), được bổ sung cho việc lập kế hoạch —minutes(khối lượng cần đạt),pweight(trọng số sư phạm),incompatibilities,teachersmặc định,specialisationcủa phòng học. Việc gán một môn học kèm một loại tiết học tạo ra một mục riêng cho mỗi loại. Xem Khóa học, tiết học, loại tiết học.TimetableClassGroup: một tập con của một lớp.free=truetắt việc kiểm tra lỗi tương thích với phần còn lại của lớp (nhóm tự do);parentthiết lập phân cấp nhóm.
Quy tắc giữa các nhóm — phân vùng, căn chỉnh nhóm, nhóm của nhóm
Các quan hệ giữa những nhóm nằm trong nhánh con groups của thời khóa
biểu, dưới ba dạng:
| Lược đồ | Thực thể | Ý nghĩa | Trang |
|---|---|---|---|
TimetableGroupTimeset |
phân vùng | Các nhóm của cùng một lớp loại trừ nhau, được xếp song song (nửa lớp, môn tự chọn) | Phân vùng lớp |
TimetableGroupSpaceset |
căn chỉnh nhóm | Các nhóm thuộc những lớp khác nhau cùng học trên các khung giờ trùng khớp | Căn chỉnh nhóm |
TimetableGroupGroupset |
nhóm của nhóm | Siêu nhóm (GroupsetItem: name, code, groups[]) gom nhiều nhóm lại |
Nhóm của nhóm |
Xem thêm phần tổng quan Lớp, nhóm, nhóm con.
Cấp 3 — Tiết học
Một tiết học (Lesson) là đơn vị giảng dạy thật sự được đặt vào thời
khóa biểu: thời lượng, môn học, nhóm, giáo viên, phòng học, tài nguyên,
vị trí và trạng thái. Nó được sinh ra từ một môn học của lớp (xem cấp 2)
và gắn hoặc vào một lớp (class.lessons), hoặc trực tiếp vào thời
khóa biểu (timetable.lessons) — trường hợp sau dành cho nhóm của nhóm
và các tiết học nhiều nhóm, liên quan đến nhiều lớp.
Phần cốt lõi của một tiết học
Một tiết học mang những trường lập kế hoạch — duration (theo số khung
giờ), duration_actual / duration_accounted (số phút thực tế / được
tính công), modality, subject, group, teachers, classroom,
resources — kèm theo position, status, memos và một định danh
(_id, _osrev). Đặt teachers hoặc classroom thành null
buộc một cách tường minh rằng không có giáo viên hay phòng học.
Tiết học phức hợp
Một tiết học có thể gom những tiết học khác:
assoc— tiết học liên kết: các nhóm hoán đổi cùng nhau.concat— tiết học nối tiếp: liền nhau một cách chặt chẽ.weekalt— tuần luân phiên: mỗi tuần một biến thể của tiết học.
Những cơ chế này bao trùm các tiết học phức hợp — xem Tiết học phức hợp: luân phiên, liên kết, nối tiếp.
Vị trí của một tiết học
position là một đối tượng đặt tiết học vào thời gian. Nó gom những
trường sau:
position.day— ngày của tiết học, thay đổi hình thức theo chế độ của thời khóa biểu: một tên thứ (monday…sunday) ở chế độ theo tuần, một số thứ tự ngày trong chu kỳ ("1","2"…) ở chế độ theo chu kỳ, hoặc một ngàyYYYY-MM-DDở chế độ lịch. Vẫn là một trường duy nhất, chỉ đổi hình thức theo chế độ; nó luôn có mặt.position.period— chỉ số của khung giờ trong lưới thời gian. Một tiết học không cóperiodlẫnstart/endtương ứng với một ngày nghỉ lễ.position.start/position.end— giờ bắt đầu và giờ kết thúc chính xác (HH:MM), dành cho những tiết học ngoài khung giờ hoặc ở chế độ lịch mà không khớp với một khung giờ chuẩn.position.fixed— giá trị đúng/sai (mặc định là sai): một tiết học được ghim, mà việc tạo tự động sẽ không dịch chuyển.
Tiết học của một lớp nằm trong class.lessons; mảng timetable.lessons
mang những tiết học liên lớp gắn với nhóm của nhóm.
Định danh của một tiết học
Mỗi tiết học mang hai trường định danh kỹ thuật, có trên các tài khoản Premium:
_id— định danh ổn định, được cấp khi tạo tiết học và bất biến về sau (nó kết hợp một dấu thời gian với một mã băm nội dung). Đây là khóa của một tiết học cho việc biên tập cộng tác và cho một công cụ bên ngoài theo dõi các tiết học theo thời gian. Với những lần lặp định kỳ của một thời khóa biểu ở chế độ lịch (tuần luân phiên, nối tiếp, liên kết),_idcủa mỗi lần lặp được suy ra từ_idcủa tiết học gốc, và tiết học gốc vẫn nhận ra được._osrev— mã phiên bản (khóa lạc quan), tăng lên sau mỗi lần sửa đổi (dấu thời gian + số thứ tự sửa đổi), theo một thứ tự chữ cái chặt chẽ (nhờ đó dễ dàng biết một phiên bản có mới hơn phiên bản khác hay không). Nó cho phép việc biên tập cộng tác phát hiện và hợp nhất các sửa đổi đồng thời: một phiên bản đã cũ ở phía máy khách báo hiệu một xung đột, và máy chủ phân xử hoặc hợp nhất thay vì ghi đè trong im lặng.
Vắng mặt
Các lần vắng mặt dùng chung một phần cơ sở (Absence: date_start,
date_end, reason, hours, comment, trạng thái), rồi biến thể theo
đối tượng liên quan.
Một AbsenceTeacher có thể được giới hạn ở một số subjects/classes
và mang một mảng quy tắc thay thế (substitutes, mỗi phần tử là một
AbsenceTeacherSubstitute: giáo viên thay thế, khoảng thời gian, khung
giờ, lớp và môn học được bao phủ). Trạng thái khác nhau tùy đối tượng
(ví dụ ok/aborted cho một lớp). Xem mục từ điển
Thay thế / dạy thay và mô-đun Quản lý vắng mặt.
Thành viên nhân sự
Mô-đun riêng biệt (cũng được bán độc lập) dành cho công tác quản sinh và các nhiệm vụ phụ trách.
StaffingGrid là khuôn mẫu (ngày, khung giờ); các assignments mô tả
những nhiệm vụ (req/ideal, priority, needs chi tiết theo từng
khung giờ qua StaffingNeedSpan); schedule cụ thể hóa các ca trực
thực tế theo từng ngày. Xem mô-đun Quản lý nhân sự.
Sự kiện
Event là một mục lịch đặt chồng lên lưới: điều gì đó diễn ra
trong cơ sở giáo dục mà không phải một tiết học thông thường — một
buổi họp đánh giá kết quả của lớp, một buổi họp phụ huynh, một kỳ thi
gói gọn trong một ngày, một buổi tham quan, một ngày hội mở cửa trường.
Sự kiện được xếp trong từ điển events (khóa dạng event-<n>) và thuộc
các tính năng Premium.
Các trường của một Event (bắt buộc: title, start, end):
title— tiêu đề hiển thị.start/end— thời điểm bắt đầu và kết thúc, theo định dạngYYYYMMDDTHHmmSS.rrule— quy tắc lặp lại nếu có.attendees— người tham dự: một người dùng, một lớp, một nhóm, một nhãn tự do (custom), hoặc toàn bộ cơ sở giáo dục (everybody) / bất kỳ ai muốn tham gia (anyone).location— địa điểm: một phòng học của thời khóa biểu hoặc một nhãn tự do.resources— tài nguyên được giữ chỗ cho sự kiện.videolink— liên kết họp trực tuyến để tham dự từ xa.memos— ghi chú;color— màu sắc (dạng thập lục phân).
Cách vận hành về mặt sử dụng (tạo sự kiện, đặt lên lưới, các trường trong giao diện) được mô tả trong Sự kiện đơn lẻ.
Bảng thông tin
Panel là một bảng thông tin hiển thị các tiết học trong ngày
(sảnh, phòng, màn hình tiếp đón…). Nó xác định lựa chọn columns,
topline, các filters/exclusions và những thiết lập về giao diện.
Xem mục từ điển Bảng thông tin.
Định danh, bản sao cục bộ và đối chiếu với một ERP
Để nối mô hình Omniscol với một hệ thống dữ liệu gốc bên ngoài, có ba nguyên tắc quan trọng nhất:
-
Khóa của từ điển chính là các định danh ổn định. Môn học, người dùng, giáo viên, lớp, nhóm, phòng học, tài nguyên được đánh chỉ mục bằng một định danh bất biến (khóa JSON), chứ không bằng nhãn của chúng. Chính trục này — chứ không bao giờ là
name— mới là thứ cần dùng cho mọi phép đối chiếu. -
Trường
_extids(ExternalIds) mang các định danh bên ngoài. Có mặt trên những thực thể đồng bộ được (Subject,Family,TimetableSite,TimetableClassroom,TimetableResource,TimetableTeacher,TimetableClass,TimetableClassGroup,User…), nó gắn cho mỗi thực thể các định danh của nó trong những hệ thống thứ ba, ví dụ{ "auriga": "12345", "aimaira": "67890" }. Đây là điểm neo chuẩn tắc cho một phép ghép nối hai chiều. -
Bản sao cục bộ giữa cấp trường ↔ thời khóa biểu là có chủ đích. Một môn học của lớp hay một giáo viên của thời khóa biểu là một bản sao được bổ sung, không phải một tham chiếu sống. Vì vậy một hệ thống dữ liệu gốc bên ngoài phải quyết định ghép nối ở cấp nào: dữ liệu gốc của trường (danh mục lâu dài) hay một thời khóa biểu cụ thể (kế hoạch có mốc thời gian). Chi tiết các quy tắc lan truyền nằm trong Tổ chức dữ liệu.
Cấu hình đồng bộ nằm trong config.extsync
(SchoolConfigExtsync): systems (các trình kết nối đã cấu hình), sync
(chiều đồng bộ và các thực thể), export và schedules, cùng những bảng
đối chiếu (mappings) theo khóa và định danh Omniscol. Về mặt truy cập
bằng chương trình, API REST và mã thông báo được mô tả trong
Mã thông báo API; các trình kết nối đồng bộ
nằm trong Đồng bộ với hệ thống bên ngoài.
Hình thức chính xác và đầy đủ của từng trường vẫn do lược đồ JSON tham chiếu của tài khoản xác định (
https://api.omniscol.com/api/guest/school_schema.json, trình xem dễ đọc tại omniscol.com/vi/datamodel). Nếu có khác biệt giữa trang này và lược đồ, lược đồ là căn cứ.