---
# System prepended metadata

title: TP_MS_ReinathanEzkhielKurniawan_2406397675_SBD1

---

> **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)**

![image](https://hackmd.io/_uploads/B1lDkRBP-e.png)


## **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.*
