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