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