Mereka Bentuk Seni Bina Pangkalan Data SaaS

Keputusan pangkalan data yang buruk pada minggu pertama anda akan menghantui anda selama bertahun-tahun.

Seorang pengasas SaaS memerlukan skema yang mengendalikan multi-tenancy, pengebilan, dan pertumbuhan. Jika anda tersilap, anda akan menulis semula keseluruhan sistem anda dalam masa enam bulan.

Berikut adalah cara untuk membina skema yang sedia untuk pengeluaran (production-ready).

  1. Pilih Strategi Tenant Anda

Anda mesti mengasingkan data antara pelanggan.

• Peringkat baris (Shared DB): Kompleksiti rendah. Terbaik untuk kebanyakan startup. Gunakan penapis WHERE organization_id = ? pada setiap query. • Peringkat skema (Separate Schemas): Kompleksiti sederhana. Baik untuk keperluan kawal selia. • Peringkat pangkalan data (Separate DBs): Kompleksiti tinggi. Terbaik untuk pelanggan perusahaan (enterprise).

Untuk 90% produk baharu, multi-tenancy peringkat baris adalah pilihan yang tepat.

  1. Hierarki Entiti yang Betul

Jangan bil pengguna secara langsung. Pengguna datang dan pergi. Organisasi kekal.

Hierarki tersebut harus kelihatan seperti ini: User ── MemberOf ── Organization ── Subscription ── Invoice

• Users: Simpan jadual ini untuk identiti sahaja. Gunakan UUID untuk menghalang serangan. • Organizations: Ini adalah sempadan tenant anda. Sentiasa hubungkan langganan kepada organisasi. • Memberships: Gunakan jadual penyambung (join table) untuk menghubungkan pengguna kepada organisasi. Simpan peranan (roles) di sini, bukan pada jadual pengguna.

  1. Pengebilan dan Langganan

Jangan sesekali gunakan boolean ringkas seperti is_active. Ini akan menghasilkan data yang tidak teratur.

Gunakan mesin keadaan (state machine) untuk langganan. Keadaan biasa termasuk: • trialing • active • past_due • canceled • expired • incomplete

Ini membolehkan anda mengendalikan kegagalan pembayaran dan tempoh ihsan (grace periods) tanpa pembaikan data secara manual.

  1. Wang dan Invois

Ikuti peraturan ketat ini untuk mengelakkan ralat kewangan:

• Jangan sesekali gunakan FLOAT atau REAL untuk wang. Gunakan integer untuk menyimpan sen. Sebagai contoh, $29.99 menjadi 2999. • Gunakan jadual invoice_line_items. Anda memerlukan ini untuk laporan cukai dan bayaran balik (refunds). • Gunakan jadual usage_events jika anda mengenakan caj berdasarkan sejauh mana pelanggan menggunakan produk anda.

  1. Tip Prestasi

• Indeks kunci asing (foreign keys) anda. • Indeks lajur status anda. • Indeks lajur cap masa (timestamp) anda. • Elakkan query N+1. Gunakan JOIN untuk mendapatkan data organisasi dan langganan dalam satu perjalanan.

Skema yang baik tidak kelihatan apabila ia berfungsi. Ia menjadi bencana apabila ia gagal.

Bina untuk organisasi. Gunakan mesin keadaan. Simpan wang sebagai integer.

Sumber: https://dev.to/feidou/designing-saas-database-architecture-users-organizations-subscriptions-and-billing-df

Komuniti pembelajaran pilihan: https://t.me/GyaanSetuAi