Dalam pengembangan skema database, penggunaan bentuk jamak (plural) untuk penamaan tabel merupakan praktik yang umum dilakukan. Secara semantik, hal ini sangat logis karena sebuah tabel berfungsi sebagai kontainer yang menyimpan kumpulan data, misalnya tabel customers yang menampung seluruh records pelanggan. Selain itu, penggunaan bentuk jamak efektif untuk menghindari konflik dengan reserved words pada DBMS, seperti kata user yang sering kali memiliki fungsi sistem internal.
Akan tetapi, hal ini tidak boleh dilakukan pada MagicAppBuilder. Alasan pertama, MagicAppBuilder agnostik dengan bahasa. Tidak semua bahasa memiliki bentuk plural. Sebagai contoh, dalam bahasa Indonesia, tidak ada pembedaan antara “pelanggan” dalam bentuk tunggal dan “pelanggan” dalam bentuk jamak. Alasan kedua, MagicAppBuilder mengganggap nama entitas mewakili entitas secara kata, bukan bahasa. “customer” adalah tabel untuk menyimpan data “customer”, begitu pula dengan tabel-tabel lainnya. Pada GraphQL, terdapat 2 fungsi untuk mengambil data, yaitu data tunggal yang sudah diketahui identitasnya, dan data jamak yang belum diketahui identitasnya. Karena tujuan penggunaan dan definisinya berbeda, maka namanya juga dibedakan agar mudah diimplementasikan ke semua bahasa pemrograman yang ada.
getCustomer adalah fungsi untuk mendapatkan satu data customer dengan identitas yang jelas. getCustomers adalah fungsi untuk mendapatkan beberapa data customer yang belum diketahui identitasnya. Pengguna hanya memasukkan kriteria pencarian dan aplikasi sama sekali tidak mengetahui berapa data yang disimpan di database sebelum pencarian dilakukan.
Dari contoh di atas, jika pengguna ngotot menggunakan bentuk jamak dengan nama tabel customers, billing_statuses, dan countries, maka MagicAppBuilder yang agnostik dengan bahasa, akan membuat fungsi sebagai berikut:
- getCustomers(id) adalah fungsi untuk mendapatkan satu data customer dengan identitas yang jelas.
- getCustomerses() adalah fungsi untuk mendapatkan beberapa data customer yang belum diketahui identitasnya.
- getBillingStatuses(id) adalah fungsi untuk mendapatkan satu data billing status dengan identitas yang jelas.
- getBillingStatuseses() adalah fungsi untuk mendapatkan beberapa data billing status yang belum diketahui identitasnya.
- getCountries(id) adalah fungsi untuk mendapatkan satu data country dengan identitas yang jelas.
- getCountrieses() adalah fungsi untuk mendapatkan beberapa data country yang belum diketahui identitasnya.
Meskipun secara visual, pengguna dapat memperbaikinya dengan internationalization atau localization, namun pengembang yang akan melakukan customization pada aplikasi, akan mengalami kebingungan dengan bentuk seperti ini.
getCustomers(id) menjadi ambigu. Apakah fungsi ini mengembalikan satu data atau banyak data? getCustomerses() juga terlihat sangat aneh. Apakah customers merupakan kata dalam bahasa Inggris atau bahasa lainnya? Jika customers adalah kata dalam bahasa Inggris, mengapa ada customerses?
Jika pengguna menggunakan bentuk tunggal, yaitu customer, billing_status dan country, maka MagicAppBuilder akan membuat fungsi sebagai berikut:
- getCustomer(id) adalah fungsi untuk mendapatkan satu data customer dengan identitas yang jelas.
- getCustomers() adalah fungsi untuk mendapatkan beberapa data customer yang belum diketahui identitasnya.
- getBillingStatus(id) adalah fungsi untuk mendapatkan satu data billing status dengan identitas yang jelas.
- getBillingStatuses() adalah fungsi untuk mendapatkan beberapa data billing status yang belum diketahui identitasnya.
- getCountry(id) adalah fungsi untuk mendapatkan satu data country dengan identitas yang jelas.
- getCountries() adalah fungsi untuk mendapatkan beberapa data country yang belum diketahui identitasnya.
MagicAppBuilder sama sekali tidak peduli dengan arti kata perkata dari nama tabel dan nama kolom yang digunakan. MagicAppBuilder fokus kepada bagaimana aplikasi dapat dibuat dalam hitungan detik tanpa ketergantungan dengan Artificial Intelegent (AI) pihak ketiga.
Jika bentuk jamak diharamkan, lalu bagaimana dengan reserved word seperti user? Untuk reserved word, pengguna harus mencari kata pengganti yang tidak termasuk ke dalam reserved word. Misalnya user diganti menjadi admin atau administrator namun tetap dalam bentuk tunggal. Penggunaan nama admin alih-alih user dilakukan oleh MagicAppBuilder di system entity.
Lalu bagaimana jika pengguna menggunakan bahasa selain bahasa Inggris, misalnya bahasa Indoneisa? Pengguna akan menggunakan nama-nama seperti pelanggan, status_tagihan, dan negara.
MagicAppBuilder akan membuat fungsi-fungsi sebagai berikut:
- getPelanggan(id) adalah fungsi untuk mendapatkan satu data pelanggandengan identitas yang jelas.
- getPelanggans() adalah fungsi untuk mendapatkan beberapa data pelanggan yang belum diketahui identitasnya.
- getStatusTagihan(id) adalah fungsi untuk mendapatkan satu data tagihan dengan identitas yang jelas.
- getStatusTagihans() adalah fungsi untuk mendapatkan beberapa data tagihans yang belum diketahui identitasnya.
- getNegara(id) adalah fungsi untuk mendapatkan satu data negara dengan identitas yang jelas.
- getNegaras() adalah fungsi untuk mendapatkan beberapa data negara yang belum diketahui identitasnya.
Meskipun terlihat sedikit aneh, bagi beberapa developer yang telah berpengalaman, hal ini lebih dapat diterima dibandingkan dengan getCustomerses, getBillingStatuseses, dan getCountrieses.