> **Praktikum Sistem Basis Data** > ***Modul 1 - Relational Database Management System***
> **Tugas Pendahuluan**
> **Kode Asisten: MS**
**Nama**: Reinathan Ezkhiel Kurniawan
**NPM** : 2406397675
# **Studi Kasus Sistem Basis Data pada Gojek**
Gojek merupakan sebuah *platform* **layanan on-demand** yang menyediakan berbagai layanan seperti transportasi (*Go-car, Go-hemat, Go-ride*), makanan (*Go-food*), belanja (*Go-Shop*), dan banyak layanan lainnya. Karena terdapat banyak sekali layanan yang tersedia dalam satu aplikasi tersebut, menjadikan aplikasi ini terintegrasi dengan sistem basis data yang cukup kompleks untuk mendukung operasionalnya.
## **1. Analisis Entitas**
Berdasarkan fitur utama aplikasi, entitas-entitas yang menyusun sistem ini adalah:
> Pada analisis ini, saya menfokuskan analisis terhadap awal mula tujuan aplikasi ini dibuat , yaitu sebagai ***platform*** penyedia layanan **Ojek *Online***. Jadi, penamaan Entitas akan mengacu kepada *side* tersebut.
## Entitas Utama Sesuai Perspektif Analisis
* **Users**
Menyimpan informasi pribadi mengenai pengguna Gojek, seperti data diri, rekening, keperluan *authentication* , dsbg.
* **Drivers**
Menyimpan data pengemudi/mitra yang sudah terverifikasi dan terdaftar secara resmi melalui proses pengajuan yang bertahap. Pengemudi merupakan entitas yang menyediakan layanan transportasi terhadap *users*.
* **Orders**
Menyimpan data pesanan yang dibuat oleh pengguna.
* **Services**
Menyimpan informasi tentang berbagai layanan ditawarkan oleh Gojek. Bisa bersifat linear (*Go-shop*/*Go-pay*) ataupun pilihan lanjutan (*Go-car XL*, *Go-car hemat*).
* **Payments**
Menyimpan informasi pembayaran untuk setiap pesanan.
## **2. Kamus Data (Data Dictionary)**
Berikut adalah detail atribut untuk setiap entitas yang telah dianalisis.
### **Tabel: Users**
| Nama Atribut | Tipe Data | Constraints | Keterangan |
| :--- | :--- | :--- | :--- |
| `user_id` | UUID,PK | Not Null | ID unik pengguna |
|`phone_number` | Varchar,Unique | Not Null | Nomor telepon untuk login dan notifikasi |
| `email` | Varchar | Unique (*opsional*, bisa verifikasi lewat **OTP Code** pada *service* lain seperti **SMS**) | *Email* pengguna untuk keperluan *account recovery* |
|`created_at` | Timestamp | Not Null |Tanggal dan waktu pendaftaran akun. |
|`user_location` | Geolocation | Not Null |Lokasi pengguna saat ini yang digunakan untuk penempatan pengemudi. |
### **Tabel: Drivers**
| Nama Atribut | Tipe Data | Constraints | Keterangan |
|:-------------- |:--------- |:----------------------- |:----------------------------------------------------------------------- |
| `driver_id` | UUID,PK | Not Null | ID unik pengemudi |
| `name` | Varchar | Not Null | Nama pengemudi |
| `vehicle_type` | Varchar | Not Null | Tipe kendaraan yang digunakan |
| `vehicle_details`|Text | Not Null | Detail kendaraan, termasuk **plat nomor** dan **warna**. |
| `rating` | Decimal | Not Null; *Default* = 0 | Penilaian dari pengguna |
| `status` | Enum | Not Null | Status aktif/inaktif yang **mungkin saja bisa terdapat** dan di-*audit* oleh pihak internal dalam pengecekan mitra |
### **Tabel: Orders**
| Nama Atribut | Tipe Data | Constraints | Keterangan |
| :--- | :--- | :--- | :--- |
| `order_id` | UUID,PK | Not Null | ID unik pesanan |
| `user_id` | UUID,FK | Not Null | ID dari pengguna yang membuat pesanan |
| `driver_id` | UUID,FK | Not Null | ID dari pengemudi yang telah mengambil *order* |
| `service_id` | UUID,FK | Not Null | ID dari layanan yang dipesan (**terdapat** sebagai pilihan *users*) |
| `order_status` | Enum | Not Null | Status pesanan (*pick up*, dalam perjalanan , selesai) |
| `created_at` | Timestamp | Not Null | Waktu pemesanan dibuat dan disetujui oleh kedua belah pihak *users* dan pengemudi. |
| `pickup_location` | Geolocation | Not Null | Lokasi penjemputan. |
| `dropoff_location` | Geolocation | Not Null | Lokasi tujuan. |
### **Tabel: Services**
| Nama Atribut | Tipe Data | Constraints | Keterangan |
| :--- | :--- | :--- | :--- |
| `service_id` | UUID,PK | Not Null | ID unik layanan |
| `service_name` | Varchar | Not Null | Nama layanan (*Go-car XL*, *Go-car hemat*) |
| `description` | Text | - | Dekripsi layanan secara singkat |
| `base_fare` | Decimal | Not Null | Tarif dasar layanan yang diperlukan untuk perhitungan berdasarkan metrik - metrik tersedia. |
| `distance_rate` | Decimal | Not Null | Biaya per kilometer / jarak terukur untuk sebuah layanan transportasi. |
### **Tabel: Payments**
| Nama Atribut | Tipe Data | Constraints | Keterangan |
| :--- | :--- | :--- | :--- |
| `payment_id` | UUID,PK | Not Null | ID unik pembayaran |
| `order_id` | UUID,FK | Not Null | ID pesanan yang terkait |
| `payment_method` | Enum | Not Null | Metode pembayaran (*Go-pay* / *Cash*) |
| `total_amount` | Decimal | Not Null | Jumlah total pembayaran |
| `payment_status` | Enum | Not Null | Status pembayaran |
## **3. Analisis Relasi**
Bagian ini menjelaskan hubungan antar entitas beserta kardinalitasnya.
* **Users ke Orders (1:N)**
Satu pengguna dapat membuat banyak pesanan pada aplikasi, tetapi satu pesanan hanya dapat dibuat oleh satu pengguna.
* **Drivers ke Orders (1:N)**
Satu pengemudi dapat menerima banyak pesanan, tetapi satu pesanan hanya dapat ditangani oleh satu pengemudi.
* **Services ke Orders (1:N)**
Satu layanan dapat memiliki banyak pesanan, tetapi satu pesanan hanya terkait dengan satu layanan.
* **Orders ke Payments (1:1)**
Setiap pesanan memiliki satu pembayaran terkait, dan satu pembayaran hanya bisa terkait dengan satu pesanan.
## **4. Schema Flow (Alur Logika Data)**
**Kasus: "Ketika Pengguna Membuka Aplikasi dan Memesan Layanan Gojek Motor"**
1. **Pendaftaran dan Login**
Pengguna mendaftar atau *login* menggunakan nomor telepon atau *email*.
2. **Memilih Layanan**
Pengguna memilih layanan yang diinginkan, sistem menarik data layanan dari tabel *Services* (Memilih *Go-ride*).
3. **Mengatur Lokasi Penjemputan**
Pengguna memasukkan lokasi penjemputan dan tujuan, yang diperbarui dalam sistem secara *real-time* untuk memastikan akurasi.
4. **Pemilihan Layanan Lanjutan**
Pengguna dapat memilih opsi lanjutan terkait tingkat layanan seperti *Go-ride Hemat* .
5. **Pencarian Pengemudi**
Sistem mencari pengemudi yang tersedia pada area sekitar lokasi penguna, memanfaatkan algoritma tertentu untuk menentukan pengemudi terdekat.
6. **Konfirmasi Pesanan**
Setelah pengemudi menerima pesanan, entri baru ditambahkan di tabel **Orders** dan status pembaruan dilakukan (*Enum*).
7. **Pembayaran**
Saat pesanan selesai, pengguna melakukan pembayaran melalui metode yang dipilih sebelumnya, dan sistem mencatatnya di tabel *Payments*.
## **5. Entity Relationship Diagram (ERD)**

## **Kesimpulan**
Dari desain arsitektur di atas, sistem basis data Gojek menggunakan:
* **Arsitektur Database-per-Service** : Menghindari *single point of failure* dengan memisahkan *database* untuk setiap fungsi bisnis (*GoRide*,*GoFood*,*GoSend*).
* **Integritas Data Geospasial** : Pemanfaatan ekstensi tertentu untuk melakukan perhitungan jarak dan koordinat lokasi secara presisi antara mitra dan pelanggan.
* **Pengelolaan Data yang Efisien** : Dengan pendekatan yang terdistribusi, Gojek mampu mengelola data pengguna, pengemudi dan transaksi dengan cara yang efisien.
## **Referensi**
1. S. Niranjanamurthy, N. M. Kumar, dan B. R. Dayananda, “Research Study on Go-Jek App,” International Journal of Scientific Research in Computer Science, Engineering and Information Technology, vol. 3, no. 3, pp. 234-245, 2018. [Online]. Available: https://ijsrcseit.com/paper/CSEIT1833116.pdf. [Diakses: 08-Feb-2026].
2. A. Gupta, “Microservices Architecture at Gojek,” IEEE Xplore - Software Engineering Conference, 2019. [Online]. Available: https://ieeexplore.ieee.org/document/8984025. [Diakses: 08-Feb-2026].
---
## **Notes**
*Struktur di atas adalah ketentuan minimum. Anda dapat mengubah urutan, menambah bagian, atau menggabungkan penjelasan selama analisis dibuat dengan jelas, terstruktur, dan menjelaskan alasan di balik setiap keputusan.*