ERD Lengkap HRIS (31+ Tabel)
Estimasi Waktu: 30-45 menit (membaca dan memahami)
Level: Pemula
Tipe: Teori - tidak ada coding di lesson ini
Status: FREE PREVIEW
Di lesson sebelumnya, kita sudah menganalisis kebutuhan database dan menentukan modul-modul yang diperlukan. Sekarang saatnya memvisualisasikan struktur database tersebut dalam bentuk ERD (Entity Relationship Diagram). ERD adalah "peta" yang menunjukkan semua tabel dan bagaimana mereka saling terhubung.
Lesson ini adalah lesson FREE PREVIEW - artinya bisa diakses tanpa berlangganan. Tujuannya agar calon member bisa melihat seberapa lengkap dan detail struktur database yang akan dibangun di kursus ini.
ERD (Entity Relationship Diagram) adalah peta visual database. Bayangkan seperti denah rumah sebelum membangun:
| Istilah ERD | Analogi Denah Rumah | Contoh di HRIS |
|---|---|---|
| Entity (Tabel) | Ruangan (kamar, dapur, ruang tamu) | employees, departments, payrolls |
| Attribute (Kolom) | Isi ruangan (kasur, meja, kursi) | name, email, salary |
| Relationship (Relasi) | Pintu penghubung antar ruangan | employee belongsTo department |
| No | Topik | Deskripsi |
|---|---|---|
| 1 | Cara Membaca ERD | Simbol PK, FK, UK dan jenis relasi |
| 2 | Master Data Tables | 5 tabel referensi (departments, positions, dll) |
| 3 | Employee Tables | 11 tabel data karyawan lengkap |
| 4 | Attendance & Leave | 7 tabel kehadiran dan cuti (3 + 4) |
| 5 | Payroll & Tax | 8 tabel penggajian dan pajak (5 + 3) |
| Manfaat | Penjelasan |
|---|---|
| Visualisasi Sebelum Coding | Lihat big picture dulu, coding sekali jadi. Tanpa ERD = refactor berkali-kali. |
| Komunikasi Tim | ERD = bahasa universal untuk developer, DBA, dan stakeholder. |
| Deteksi Error Dini | Ketahuan tabel kurang/lebih, relasi salah. Fix di ERD lebih cepat dari fix di kode. |
| Dokumentasi | Onboarding developer baru jadi mudah. "Ini peta database kita." |
Cara Membaca ERD
Sebelum kita melihat ERD lengkap, penting untuk memahami simbol-simbol yang digunakan. Simbol-simbol ini adalah standar industri yang digunakan di berbagai tools ERD seperti MySQL Workbench, dbdiagram.io, dan lainnya.
Berikut adalah simbol-simbol yang akan sering Anda temui di ERD:
| Simbol | Nama Lengkap | Penjelasan | Contoh |
|---|---|---|---|
PK |
Primary Key | ID unik untuk setiap baris. Tidak boleh duplikat dan tidak boleh NULL. | id = 1, 2, 3... |
FK |
Foreign Key | Penghubung ke tabel lain. Nilainya harus ada di tabel referensi. | department_id → departments.id |
UK |
Unique Key | Tidak boleh duplikat, tapi boleh NULL (berbeda dengan PK). | email harus unik per karyawan |
? |
Nullable | Kolom boleh kosong (NULL). Tanpa tanda ini = wajib diisi. | middle_name? boleh tidak diisi |
Selain simbol kolom, ada juga jenis-jenis relasi antar tabel yang perlu dipahami. Relasi menentukan bagaimana data di satu tabel terhubung dengan data di tabel lain.
| Jenis Relasi | Penjelasan | Contoh di HRIS |
|---|---|---|
| One-to-Many (1:N) | Satu record di tabel A bisa punya banyak record di tabel B | 1 Department : N Employees |
| Many-to-One (N:1) | Banyak record di tabel A merujuk ke satu record di tabel B | N Employees : 1 Department |
| One-to-One (1:1) | Satu record di tabel A hanya punya satu record di tabel B | 1 User : 1 Employee |
| Many-to-Many (N:N) | Banyak record di A bisa terhubung ke banyak record di B (butuh pivot table) | N Employees : N Skills (via employee_skills) |
1. Master Data Tables (5 Tabel)
Sekarang mari kita lihat ERD untuk setiap modul. Kita mulai dari Master Data - tabel-tabel referensi yang menjadi "kamus" untuk modul lain. Data di tabel ini jarang berubah dan digunakan sebagai referensi oleh tabel-tabel lain.
Setiap kotak di bawah merepresentasikan satu tabel. Warna header menunjukkan modul, dan isi kotak adalah kolom-kolom yang ada di tabel tersebut.
| Tabel | Fitur Khusus | Digunakan Oleh |
|---|---|---|
departments |
Self-reference parent_id untuk hierarki (IT → IT Development) |
employees, employee_mutations |
positions |
Level jabatan + range gaji (min/max salary) | employees, employee_mutations |
branches |
GPS koordinat + radius untuk geofencing absensi | employees, attendances |
shifts |
Jam kerja + toleransi keterlambatan | employees, attendances |
holidays |
Hari libur nasional + perusahaan | attendances, payrolls |
2. Employee Tables (11 Tabel)
Modul Employee adalah yang paling kompleks karena menyimpan semua data terkait karyawan. Kita memisahkan data ke banyak tabel karena satu karyawan bisa memiliki banyak dokumen, banyak anggota keluarga, banyak kontrak, dan sebagainya.
Tabel utama adalah employees yang menjadi "pusat" dan terhubung ke semua tabel employee_* lainnya melalui foreign key employee_id.
Relasi Employee:
| Fitur | Tabel/Kolom | Penjelasan |
|---|---|---|
| Hierarki Atasan | manager_id |
Self-reference untuk struktur organisasi |
| Face Recognition | face_descriptor (JSON) |
Data wajah untuk verifikasi absensi |
| Track Mutasi | employee_mutations |
Riwayat promosi, demosi, rotasi |
| Pinjaman Karyawan | employee_loans + loan_payments |
Pinjaman dengan cicilan bulanan |
3. Attendance Tables (3 Tabel)
Modul Attendance mencatat kehadiran karyawan setiap hari. Sistem kita mendukung absensi modern dengan GPS geofencing dan foto selfie sebagai bukti kehadiran.
Selain absensi harian, modul ini juga menangani pengajuan lembur dan Work From Home (WFH) yang memerlukan approval dari atasan.
4. Leave Tables (4 Tabel)
Tabel-tabel untuk pengelolaan cuti:
Tabel
leave_approvals mendukung approval bertingkat yang fleksibel:| Level | Approver | Keterangan |
|---|---|---|
| 1 | Direct Manager | Atasan langsung karyawan |
| 2 | HR Manager | Untuk cuti lebih dari 3 hari |
| 3 | Director | Untuk cuti lebih dari 7 hari |
Setiap level approval di-track terpisah dengan status dan timestamp, sehingga bisa diaudit kapan dan siapa yang approve/reject.
5. Payroll Tables (5 Tabel)
Modul Payroll adalah yang paling kompleks karena melibatkan banyak komponen perhitungan. Kita memisahkan master komponen gaji, komponen per karyawan, data payroll bulanan, dan detail per slip.
Struktur ini memungkinkan fleksibilitas tinggi - setiap karyawan bisa punya komponen gaji berbeda, dan setiap bulan bisa dihitung ulang dengan komponen yang berbeda.
6. Tax Tables (3 Tabel)
Tabel-tabel untuk perhitungan pajak PPh21:
| Tabel | Fungsi | Contoh Data |
|---|---|---|
tax_brackets |
Bracket tarif PPh21 progresif | 0-60jt: 5%, 60-250jt: 15%, dst |
ptkp_settings |
PTKP per status perkawinan | TK/0: 54jt, K/1: 63jt, K/3: 72jt |
tax_calculations |
Hasil perhitungan pajak per payroll | Gross, PTKP, PKP, Tax Amount |
Dengan struktur ini, perubahan tarif pajak atau PTKP cukup update di tabel master, tidak perlu ubah kode program.
Ringkasan Total Tabel
Berikut adalah ringkasan lengkap semua tabel yang akan kita buat di sistem HRIS. Total ada 31+ tabel yang terbagi ke dalam 6 kategori.
| Modul | Tabel | Jumlah |
|---|---|---|
| Master Data | departments, positions, branches, shifts, holidays |
5 |
| Employee | employees, employee_documents, employee_families, employee_contracts, employee_allowances, employee_loans, employee_educations, employee_certifications, employee_experiences, employee_mutations, loan_payments |
11 |
| Attendance | attendances, overtime_requests, wfh_requests |
3 |
| Leave | leave_types, leave_balances, leave_requests, leave_approvals |
4 |
| Payroll | salary_components, payroll_periods, employee_payroll_components, payrolls, payroll_details |
5 |
| Tax | tax_brackets, ptkp_settings, tax_calculations |
3 |
Checkpoint - Review Pemahaman
Sebelum melanjutkan ke lesson berikutnya, pastikan Anda sudah memahami ERD yang sudah dibahas. Coba jawab pertanyaan-pertanyaan berikut tanpa melihat jawaban terlebih dahulu.
1. Apa arti simbol PK, FK, dan UK dalam ERD?
Hint: Primary, Foreign, Unique - apa perbedaan ketiganya?
2. Apa jenis relasi antara departments dan employees?
Hint: Satu departemen punya berapa karyawan? Satu karyawan di berapa departemen?
3. Mengapa tabel employees punya kolom face_descriptor?
Hint: Fitur modern untuk absensi
4. Apa fungsi tabel leave_approvals? Mengapa terpisah dari tabel leaves?
Hint: Multilevel approval - manager, HR, direktur
1. Simbol ERD:
- PK (Primary Key) = ID unik untuk setiap baris, tidak boleh duplikat dan tidak boleh NULL
- FK (Foreign Key) = Penghubung ke tabel lain, nilainya harus ada di tabel referensi
- UK (Unique Key) = Tidak boleh duplikat, tapi boleh NULL (berbeda dengan PK)
2. Relasi departments - employees:
One-to-Many (1:N). Satu departemen bisa punya banyak karyawan, tapi satu karyawan hanya di satu departemen. Di Laravel: Department hasMany Employee, Employee belongsTo Department.
3. Kolom face_descriptor:
Untuk menyimpan data wajah karyawan dalam format JSON (face descriptor). Data ini digunakan untuk Face Recognition saat clock in/out - sistem akan membandingkan wajah yang difoto dengan data yang tersimpan.
4. Tabel leave_approvals:
Menyimpan approval bertingkat (manager → HR → direktur). Terpisah dari leaves agar bisa track setiap level approval dengan status dan timestamp masing-masing. Satu pengajuan cuti bisa punya banyak record approval (1 leave : N approvals).
Ringkasan Lesson
1. Cara Membaca ERD:
- PK (Primary Key) = ID unik, tidak boleh duplikat dan NULL
- FK (Foreign Key) = Penghubung ke tabel lain
- UK (Unique Key) = Tidak boleh duplikat, boleh NULL
- Relasi: One-to-Many, Many-to-One, One-to-One, Many-to-Many
2. Struktur 31+ Tabel HRIS:
- Master Data (5): departments, positions, branches, shifts, holidays
- Employee (11): karyawan + dokumen, keluarga, kontrak, pinjaman, mutasi, pendidikan, sertifikasi, pengalaman
- Attendance (4): absensi + lembur + WFH
- Leave (4): jenis cuti + saldo + pengajuan + multilevel approval
- Payroll (6): komponen gaji + periode + slip + detail
- Tax (3): bracket tarif + PTKP + perhitungan
3. Fitur Unik ERD HRIS:
- Hierarki organisasi (manager_id, parent_id)
- Face Recognition (face_descriptor JSON)
- Multilevel Approval (leave_approvals dengan level)
- Geofencing (latitude, longitude, radius di branches)
Di lesson 3, kita akan mulai praktik coding - membuat migration untuk tabel Master Data. Ini adalah langkah pertama mengubah ERD menjadi database nyata.
Yang akan dipelajari:
- Membuat file migration dengan
php artisan make:migration- Mendefinisikan kolom - string, integer, boolean, decimal, nullable
- Menambahkan constraint - unique, foreign key, index
- Menjalankan migrate untuk membuat tabel di database
Tabel yang akan dibuat:
departments, positions, branches, shifts, holidaysDari ERD ke kode nyata - inilah inti dari database design! Setelah lesson 3-6 selesai, Anda akan memiliki database HRIS lengkap dengan 20+ tabel siap digunakan.