Laravolt Untuk System Analyst
Ada beberapa standard di Laravolt yang penting diketahui oleh System Analyst agar tujuan untuk mempercepat proses pengembangan Sistem Informasi bisa dicapai. Sebagian besar berkaitan dengan desain database. Mari kita bahas satu per satu.
Penamaan Tabel dan Kolom
Konsisten
Konsisten, bukan tentang bahasa Inggris semua atau bahasa Indonesia semua, tapi lebih ke konsistensi pemakaian istilah.
Konsisten, bukan hanya di level dokumen teknis, tapi di seluruh lingkup proyek. Ketika ketemu User membahas kasi, lalu di dokumen analisis dituliskan Kepasa Seksi, jangan tiba-tiba berubah menjadi head_of_section atau section_chief di rancangan database. Pakai saja istilah aslinya, kasi. Lumayan mengurangi overhead otak untuk melakukan translation dan dictionary lookup.
Mudah Dipahami
- Nama yang pendek (3 suku kata atau kurang) lebih mudah dibaca dan dipahami.
- Jika kepepetnya tidak bisa pendek, jangan memaksa untuk menyingkatnya. Nama yang panjang tapi jelas lebih baik dibanding nama yang pendek tapi butuh mikir (sekali lagi, overhead otak).
- Boleh menyingkat untuk istilah-istilah yang memang sudah umum digunakan sesuai domain bisnis proyek:
tmt
vstanggal_mulai_tugas
nip
vsnomor_induk_pegawai
npwp
vsnomor_pajak
Tidak Masalah Campur English dan Bahasa Indonesia
Tidak perlu memaksa mengubah
unit_kerja
menjadiwork_unit
atauunit_of_work
.Misal sudah punya tabel
peserta
dengan kolom-kolom diataranya:nama
,nilai_tpa
, dannilai_un
. Lalu butuh ditambahkan satu kolom lagi untuk menyimpan nilai TOEFL. Mana yang lebih baik:nilai_toefl
atautoefl_score
?
Primary Key
- Beri nama
id
. - Tipe data boleh dipilih antara:
- Unsigned integer + auto increment
- Default behaviour
- Memudahkan programmer debugging
- Mudah “ditebak” oleh user
- UUID
- Perlu sedikit kustomisasi
- Tidak mudah “ditebak” oleh user
- Sedikit merepotkan programmer ketika debugging
- Unsigned integer + auto increment
Foreign Key
- Beri prefix
_id
. - Beri nama sesuai entitas yang tersimpan di kolom tersebut, contoh:
- Lebih baik
author_id
daripadauser_id
untuk menyimpan siapa penulis sebuah Post.
- Lebih baik
- Pastikan tipe datanya sama.
Timestamps
Secara default, Laravolt akan menyimpan kapan suatu record di database dibuat dan diupdate dalam dua buah kolom:
- created_at (TIMESTAMP)
- updated_at (TIMESTAMP)
Jika membutuhkan tambahan kolom untuk menyimpan siapa yang melakukan create atau update, tambahkan kolom:
- created_by (Unsigned Big Integer)
- updated_by (Unsigned Big Integer)
Jika membutuhkan mekanise soft delete, tambahkan kolom:
- deleted_at (TIMESTAMP)
- deleted_by (Unsigned Big Integer)
Boolean
Untuk kolom dengan tipe boolean, hanya berisi nilai antara true
atau false
, gunakan nama yang mencerminkan pertanyaan yang jawabannya yes
or no
. Dalam bahasa Inggris, kolom seperti ini biasanya diawali dengan prefiks is, has, should, can, dan sejenisnya. Bisa juga digabungkan dengan sufiks able.
- is_active
- has_attachment
- should_change_password
- is_downloadable
- can_closed
Versi bahasa Indonesianya kira-kira seperti ini:
- apakah_aktif
- punya_lampiran
- apakah_harus_ganti_password
- bisa_didownload
- bisa_diakhiri
Enum
Untuk kolom enumerasi yang kemungkinan "value-nya sudah fixed", dianjurkan untuk tetap memakai tipe data string
dan bukan enum
, karena:
- Enum belum menjadi standard SQL, hanya dikenali di MySQL.
- Jangan langsung percaya dengan pernyataan "value-nya sudah fixed". Perubahan itu pasti, dan mengubah enum di level database itu tidak begitu menyenangkan bagi programmer.
- Laravolt memiliki mekanisme class
Enum
yang lebih friendly untuk programmer. - Untuk kebutuhan dokumentasi, boleh tetap menuliskan sebagai
enum
. Programmer laravolt akan mengkonversinya menjadistring
biasa ketika koding.
Menyimpan File (Media Library)
Untuk entitas yang membutuhkan menyimpan file, baik itu gambar, dokumen pdf/word/excel ataupun jenis file lainnya, semuanya akan disimpan dalam satu buah tabel yang sama. Jadi tidak perlu ditambahkan kolom-kolom untuk menyimpan metadata file. Sebaliknya, ada satu tabel khusus, media
, yang akan menyimpan metadata file tersebut ditambah dengan foreign key ke tabel lain yang berelasi.
Bukan Laravolt
User
Kolom | Tipe |
---|---|
id | Primary Key |
Varchar | |
name | Varchar |
avatar_path | Text |
avatar_extension | Varchar |
avatar_size | Unsigned Integer |
Post
Kolom | Tipe |
---|---|
id | Primary Key |
title | Varchar |
content | Text |
featured_image_path | Text |
featured_image_extension | Varchar |
featured_image_size | Unsigned Integer |
Laravolt
User
Kolom | Tipe |
---|---|
id | Primary Key |
Varchar | |
name | Varchar |
~~avatar_path~~ | ~~Text~~ |
~~avatar_extension~~ | ~~Varchar~~ |
~~avatar_size~~ | ~~Unsigned Integer~~ |
Post
Kolom | Tipe |
---|---|
id | Primary Key |
title | Varchar |
content | Text |
~~featured_image_path~~ | ~~Text~~ |
~~featured_image_extension~~ | ~~Varchar~~ |
~~featured_image_size~~ | ~~Unsigned Integer~~ |
Media
Kolom | Tipe |
---|---|
id | Primary Key |
model_type | Model (atau nama table) |
model_id | Foreign key ke tabel lain |
collection_name | Collection name. Satu tabel bisa punya banyak file collection. |
name | Nama file yang diberikan setelah diupload |
file_name | Nama file asli ketika diupload |
mime_type | jpg, png, doc, pdf, atau lainnya |
disk | Lokasi penyimpanan |
size | Ukuran file |
manipulations | - |
custom_properties | - |
responsive_images | - |
order_column | - |
created_at | - |
updated_at | - |
Yang lebih penting adalah adanya kejelasan bagi programmer apakah file-nya hanya boleh satu atau bisa banyak (Has One vs Has Many).
Laravolt menggunakan Spatie Media Library untuk penyimpanan file. Dokumentasi lebih lengkap bisa dibaca di situs resminya.
Task Description
- Sebutkan tabel apa saja yang terlibat
- Untuk form:
- Tuliskan halaman redirect yang dituju jika berhasil submit form
- Sebutkan field mana yang wajib diisi dan mana yang opsional. By default Laravolt akan membaca dari metadata database. Jika kolom didefinisikan sebagai
NOT NULL
berarti wajib diisi.
User Interface
- Fixed row (multiple input) vs add row below
- Single column vs multiple column form
- Separate multiple upload