# Desain Database

## Database

```text
db_usulan_perbaikan
```

## Entitas Utama

### users
Akun dan identitas pengguna.

### units
Unit atau bidang organisasi.

### assets
Data inventaris.

### ticket_categories
Kategori kerusakan.

### tickets
Data utama tiket.

### ticket_files
Foto dan lampiran.

### verifications
Pemeriksaan TU.

### approvals
Keputusan pimpinan.

### assignments
Penugasan teknisi dan SLA.

### work_logs
Progres dan hasil pekerjaan.

### notifications
Notifikasi in-app dan email.

### ticket_logs
Audit trail.

### system_settings
Konfigurasi aplikasi.

### login_attempts
Riwayat percobaan login.

### password_resets
Reset kata sandi.

## Relasi Ringkas

```text
units 1---n users
units 1---n assets
users 1---n tickets
assets 1---n tickets
tickets 1---n ticket_files
tickets 1---n verifications
tickets 1---n approvals
tickets 1---n assignments
tickets 1---n work_logs
tickets 1---n notifications
tickets 1---n ticket_logs
```

## Aturan Database

- gunakan `utf8mb4`;
- gunakan foreign key;
- gunakan timestamp;
- gunakan indeks pada nomor tiket, status, aset, pelapor, teknisi, dan tenggat;
- data audit tidak boleh diubah dari UI;
- gunakan soft delete hanya bila dibutuhkan;
- simpan password dalam bentuk hash;
- nama file penyimpanan harus acak.
