0

Series Cloud Database Supabase #1: Kiến trúc "Backend-in-a-Box" và Triết lý Database-First

1. Supabase không phải là "Phép màu", nó là PostgreSQL

Sai lầm lớn nhất của các Dev là coi Supabase là một "Magic Box" nơi dữ liệu tự động xuất hiện. Hãy luôn nhớ: Dưới lớp vỏ giao diện tuyệt đẹp của Supabase, nó là 100% PostgreSQL chuẩn Enterprise.

Mọi kỹ năng bạn đã học về Query Builder, Index, Locking ở các series trước đều áp dụng được 100% ở đây. Lợi thế của Supabase là nó lấy PostgreSQL làm trung tâm và tự động hóa những công việc DevOps đau đầu nhất:

  • Auto-generated API: Tự động tạo REST và GraphQL API dựa trên schema của Database.
  • Real-time: Biến các lệnh INSERT/UPDATE thành luồng dữ liệu thời gian thực qua WebSockets (thứ mà chúng ta từng mất cả series Kafka để tự build).
  • Auth & Storage: Tích hợp sẵn xác thực người dùng và lưu trữ file mà không cần viết lại từ đầu.

2. Tư duy "Database-First" và Schema Design

Với Supabase, Database Schema là tài liệu kỹ thuật quan trọng nhất. Đừng bao giờ tạo bảng bằng UI (giao diện kéo thả) nếu bạn muốn giữ môi trường ổn định.

Chuẩn Senior: Hãy sử dụng Migrations ngay từ ngày đầu tiên. Supabase hỗ trợ CLI cực mạnh. Hãy cài đặt và quản lý mọi thứ dưới dạng code.

# Cài đặt Supabase CLI
npm i -g supabase

# Đăng nhập vào project của bạn
supabase login

# Khởi tạo dự án
supabase init

Mọi thay đổi về cấu trúc bảng (thêm cột, tạo Index, thiết lập Foreign Key) phải được lưu vào file SQL trong thư mục supabase/migrations. Khi deploy lên Cloud, chỉ cần chạy supabase db push. Điều này đảm bảo Database ở Local và Production luôn là "anh em song sinh".

3. Thiết kế RLS (Row Level Security) - "Bức tường lửa" ngay tại Database

Đây chính là tính năng khiến Supabase "ăn đứt" các Backend truyền thống. Trong các dự án trước, chúng ta phải viết Middleware để check quyền: "User này có quyền sửa giao dịch này không?". Nếu viết sót, coi như lộ dữ liệu.

Ở Supabase, chúng ta định nghĩa quyền trực tiếp lên bảng (PostgreSQL Policy):

-- Chỉ cho phép chủ sở hữu của giao dịch được xem dữ liệu của chính mình
CREATE POLICY "Users can view own transactions" ON transactions
FOR SELECT
USING (auth.uid() = user_id);

Ngay cả khi bạn có lộ API Key, kẻ xấu cũng không thể lấy dữ liệu của user khác, vì Database đã tự "chặn" ngay ở tầng truy vấn. Đây là cách làm bảo mật "Zero Trust" (Không tin tưởng ai) chuẩn mực cho các hệ thống tài chính/thanh toán.

4. Kết nối từ Laravel tới Supabase (Hybrid Architecture)

Bạn không nhất thiết phải bỏ Laravel để dùng Supabase. Một kiến trúc Senior cực kỳ phổ biến hiện nay là Hybrid:

  • Laravel (PHP): Đảm nhận các nghiệp vụ phức tạp, tính toán, và các dịch vụ ngầm (Background Jobs).
  • Supabase (PostgreSQL): Đóng vai trò là Database tập trung và cung cấp API Real-time cho Frontend (Vue/React) để giảm tải cho Laravel.

Cách kết nối cực kỳ đơn giản qua file .env:

DB_CONNECTION=pgsql
DB_HOST=db.xxxxxxxxxxxx.supabase.co
DB_PORT=5432
DB_DATABASE=postgres
DB_USERNAME=postgres
DB_PASSWORD=your_super_secret_password

Lưu ý: Vì Supabase nằm trên Cloud, hãy luôn đảm bảo bạn đã cấu hình Connection Pooling (Supabase cung cấp sẵn qua PgBouncer ở cổng 6543) để tránh việc Laravel mở quá nhiều kết nối gây quá tải database.

Tổng kết Bài 1

Chúng ta đã định hình lại tư duy: Supabase là một PostgreSQL siêu năng lực được tối ưu cho tốc độ triển khai, với RLS là lá chắn bảo mật chủ động và Migrations là chìa khóa để quản trị cấu trúc.

Ở Bài 2, bạn muốn chúng ta đi sâu vào cách Tối ưu hóa Index và Partitioning cho bảng dữ liệu giao dịch khổng lồ (với hàng triệu dòng) trên Supabase, hay muốn học cách xây dựng một hệ thống Real-time thông báo biến động số dư tới ví điện tử của khách hàng bằng các Webhooks và Edge Functions của Supabase?


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí