Lewati ke konten utama

BAB 26. DATABASE DESIGN

Prinsip Desain​

Database TemuBelajar dirancang dengan prinsip:

PrinsipPenjelasan
Tenant-readySetiap tabel memiliki school_id untuk isolasi data per sekolah
3NFData dinormalisasi hingga Third Normal Form
Laravel Eloquent FriendlyKonvensi penamaan sesuai standar Laravel
ScalableMendukung horizontal scaling dan caching

Daftar Tabel Inti​

TabelPrimary KeyFungsi
schoolsidMaster data sekolah (tenant)
academic_yearsidTahun ajaran aktif per sekolah
classroomsidRombel/kelas per sekolah
usersidAutentikasi semua pengguna
studentsidData akademik siswa
teachersidData guru
subjectsidMaster mata pelajaran
topicsidMaster materi per mata pelajaran
skillsidMaster kompetensi
student_skillsidPivot: skill yang dikuasai siswa
requestsidPermintaan bantuan belajar
bookingsidPerjanjian siswa dan tutor
meetingsidSesi pertemuan tatap muka
meeting_participantsidPeserta dalam satu sesi
ratingsidPenilaian setelah sesi
social_impact_scoresidAkumulasi SIS per periode
achievementsidBadge dan pencapaian
notificationsidRiwayat notifikasi

Struktur Tabel Detail​

users​

KolomTipeNullableKeterangan
idbigint UNSIGNEDNoPrimary Key
school_idbigint UNSIGNEDNoFK → schools
namevarchar(255)NoNama lengkap
usernamevarchar(50)NoNISN atau NIP, unik
passwordvarchar(255)NoHash bcrypt/Argon2
roleenumNostudent, teacher, admin, super_admin
must_change_passwordtinyint(1)NoDefault: 1 (true)
is_activetinyint(1)NoDefault: 1 (true)
last_login_attimestampYesWaktu login terakhir
created_attimestampNo—
updated_attimestampNo—

students​

KolomTipeNullableKeterangan
idbigint UNSIGNEDNoPrimary Key
user_idbigint UNSIGNEDNoFK → users (unique)
school_idbigint UNSIGNEDNoFK → schools
classroom_idbigint UNSIGNEDYesFK → classrooms
nisnvarchar(10)NoUnik
leveltinyintNoDefault: 1
xpintNoDefault: 0
sis_scoredecimal(8,2)NoDefault: 0.00
total_sessions_as_tutorintNoDefault: 0
total_sessions_as_learnerintNoDefault: 0

requests​

KolomTipeNullableKeterangan
idbigint UNSIGNEDNoPrimary Key
school_idbigint UNSIGNEDNoFK → schools
student_idbigint UNSIGNEDNoFK → students (host)
subject_idbigint UNSIGNEDNoFK → subjects
topic_idbigint UNSIGNEDYesFK → topics
descriptiontextYesDeskripsi masalah
preferred_locationvarchar(255)NoNama lokasi
latitudedecimal(10,8)YesKoordinat GPS
longitudedecimal(11,8)YesKoordinat GPS
preferred_timedatetimeNoWaktu yang diinginkan
duration_minutessmallintNoDefault: 60
tutor_counttinyintNoDefault: 1
statusenumNopending, searching, accepted, rejected, on_going, completed, cancelled
expired_attimestampYesBatas waktu request aktif

bookings​

KolomTipeNullableKeterangan
idbigint UNSIGNEDNoPrimary Key
request_idbigint UNSIGNEDNoFK → requests
tutor_idbigint UNSIGNEDNoFK → students
statusenumNopending, accepted, rejected, rescheduled, cancelled
scheduled_atdatetimeYesJadwal disepakati
matching_scoredecimal(5,2)YesSkor AI Matching
rejection_reasontextYesAlasan penolakan
reschedule_timedatetimeYesWaktu alternatif

meetings​

KolomTipeNullableKeterangan
idbigint UNSIGNEDNoPrimary Key
booking_idbigint UNSIGNEDNoFK → bookings (unique)
qr_tokenvarchar(100)NoToken QR Check-In
qr_expires_attimestampNoKadaluarsa QR
check_in_attimestampYesWaktu Check-In
check_out_attimestampYesWaktu Check-Out
duration_actualsmallintYesDurasi nyata (menit)
summarytextYesRingkasan diskusi
completion_statusenumYessolved, partially_solved, not_solved

ratings​

KolomTipeNullableKeterangan
idbigint UNSIGNEDNoPrimary Key
meeting_idbigint UNSIGNEDNoFK → meetings
rater_idbigint UNSIGNEDNoFK → users (pemberi rating)
ratee_idbigint UNSIGNEDNoFK → users (penerima rating)
scoretinyintNo1–5
commenttextYesKomentar opsional
is_solvedtinyint(1)YesApakah masalah selesai