ERD Lengkap (31 Tabel)

ERD Lengkap HRIS (31+ Tabel)

Lesson Overview

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.

Apa itu ERD?

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
Yang Akan Dipelajari di Lesson Ini:

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)
Mengapa ERD Penting?

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 Database:

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.

departments
id PK
name
code UK
parent_id FK?
is_active
positions
id PK
name
code UK
level
min_salary
max_salary
branches
id PK
name
code UK
latitude
longitude
radius
shifts
id PK
name
clock_in
clock_out
late_tolerance
holidays
id PK
name
date
type
Penjelasan Master Data Tables:

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.

employees
id PK
user_id FK
employee_id UK
first_name
last_name
email UK
department_id FK
position_id FK
branch_id FK
shift_id FK
manager_id FK?
join_date
employment_type
status
face_descriptor JSON?
employee_documents
id PK
employee_id FK
type
name
file_path
expiry_date?
employee_families
id PK
employee_id FK
name
relationship
gender
birth_date?
is_emergency_contact
is_bpjs_member
employee_contracts
id PK
employee_id FK
contract_number
type
start_date
end_date?
salary
status
employee_allowances
id PK
employee_id FK
component_id FK
amount
effective_date
employee_loans
id PK
employee_id FK
loan_number UK
loan_amount
remaining_amount
monthly_installment
start_date
status
employee_educations
id PK
employee_id FK
level
institution
major
graduation_year
gpa?
employee_certifications
id PK
employee_id FK
name
institution
issue_date
expiry_date?
credential_id?
employee_experiences
id PK
employee_id FK
company_name
position
start_date
end_date?
description?
employee_mutations
id PK
employee_id FK
mutation_type
from_department_id FK?
to_department_id FK?
from_position_id FK?
to_position_id FK?
effective_date
reason?
loan_payments
id PK
loan_id FK
payroll_id FK?
amount
payment_date
status

Relasi Employee:

departments --> employees --> employee_*
1 Department : N Employees : N (Documents, Families, Contracts, Loans, dll)
Fitur Khusus Employee Tables:

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.

attendances
id PK
employee_id FK
date
clock_in
clock_in_latitude
clock_in_longitude
clock_in_photo
clock_out?
status
late_minutes
overtime_requests
id PK
employee_id FK
date
start_time
end_time
reason
status
approved_by FK?
wfh_requests
id PK
employee_id FK
date
reason
status
approved_by FK?

4. Leave Tables (4 Tabel)

Tabel-tabel untuk pengelolaan cuti:

leave_types
id PK
name
code UK
max_days_per_year
is_paid
is_carry_forward
leave_balances
id PK
employee_id FK
leave_type_id FK
year
entitled_days
used_days
carry_forward_days
leave_requests
id PK
employee_id FK
leave_type_id FK
start_date
end_date
total_days
reason
status
leave_approvals
id PK
leave_request_id FK
approver_id FK
level
status
notes?
approved_at?
Multilevel Approval System:

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.

salary_components
id PK
name
code UK
type
is_taxable
is_active
payroll_periods
id PK
name
start_date
end_date
payment_date
status
employee_payroll_components
id PK
employee_id FK
component_id FK
amount
effective_date
payrolls
id PK
employee_id FK
period_id FK
basic_salary
total_earnings
total_deductions
net_salary
status
payroll_details
id PK
payroll_id FK
component_id FK
type
amount
description?

6. Tax Tables (3 Tabel)

Tabel-tabel untuk perhitungan pajak PPh21:

tax_brackets
id PK
min_income
max_income?
rate
year
ptkp_settings
id PK
code UK
description
amount
year
tax_calculations
id PK
payroll_id FK
gross_income
ptkp_amount
taxable_income
tax_amount
method
Penjelasan Tax Tables:

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.

5
Master Data
11
Employee
3
Attendance
4
Leave
8
Payroll + Tax
31+
Total Tabel
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.

Pertanyaan Review:

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
Jawaban:

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

Yang Sudah Dipelajari di Lesson Ini:

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)
Lesson Berikutnya: Migration Master Data

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, holidays

Dari 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.