Từ schema trên giấy đến bảng thật
Bài trước bạn có schema dạng mô tả. Giờ hiện thực hoá nó trong Supabase — một Postgres có giao diện trực quan (Studio), Auth, Realtime và Storage tích hợp.
Hai cách tạo bảng
Cách 1 — SQL Editor (nhanh, tái lập được):
Nhờ AI sinh SQL từ schema, dán vào Supabase → SQL Editor → Run:
create table public.courses (
id uuid primary key default gen_random_uuid(),
community_id uuid not null references public.communities(id) on delete cascade,
title text not null,
description text,
created_at timestamptz default now()
);
create index idx_courses_community on public.courses(community_id);
Ưu điểm: lưu được vào file .sql trong repo, chạy lại trên môi trường khác — đây là cách dân chuyên dùng.
Cách 2 — Table Editor (trực quan, hợp người mới):
Studio → Table Editor → New table → thêm cột, chọn kiểu, bật khoá ngoại bằng giao diện click. Hợp khi bạn muốn "thấy" cấu trúc.
Thiết lập khoá ngoại (Foreign Key)
Khoá ngoại là thứ tạo nên "quan hệ". Trong Table Editor, khi thêm cột community_id, chọn "Foreign Key" → trỏ tới communities.id. Quan trọng là hành vi khi xoá:
| Tuỳ chọn ON DELETE | Khi xoá bản ghi cha thì... |
|---|---|
CASCADE | Xoá luôn các bản ghi con (xoá community → xoá hết course của nó) |
SET NULL | Đặt khoá ngoại về null |
RESTRICT | Chặn xoá nếu còn con |
Chọn CASCADE cho quan hệ "sở hữu chặt" (course thuộc community), RESTRICT khi muốn bảo vệ dữ liệu.
Index — tăng tốc truy vấn
Index như mục lục sách: giúp tìm nhanh thay vì quét cả bảng. Quy tắc đơn giản:
- Luôn index cột khoá ngoại (
community_id,user_id...) — vì hay lọc/join theo chúng - Index cột hay xuất hiện trong
WHERE(ví dụslug,email) - Đừng index tràn lan — mỗi index làm chậm ghi và tốn dung lượng
Hỏi AI: "Với schema này và các truy vấn phổ biến [mô tả], tôi nên tạo index ở đâu?"
Checklist
- Tạo được ít nhất 2 bảng có quan hệ khoá ngoại
- Hiểu và chọn đúng hành vi ON DELETE
- Tạo index cho các cột khoá ngoại
- Lưu SQL tạo bảng vào file để tái lập
