Giới thiệu
Gần đây, tôi đã làm việc nhiều hơn với Supabase và các tác vụ liên quan đến SQL, một lĩnh vực mà tôi chưa thật sự vững vàng. Đặc biệt là khi nói đến view, tôi nhận ra rằng sự hiểu biết của mình còn thiếu sót. Sau một thời gian nghiên cứu, tôi quyết định viết bài viết này như một ghi chú cá nhân và giải thích thân thiện cho người mới về bảng và view.
Bài viết này có thể chỉ đề cập đến những nội dung cơ bản, nhưng nếu bạn là người mới trong lĩnh vực cơ sở dữ liệu hoặc chỉ đơn giản là muốn tìm hiểu cách mà bảng và view hoạt động, tôi hy vọng đây sẽ hữu ích.
Giải thích về Bảng và View
Trước tiên, hãy tóm tắt các khái niệm về bảng và view.
Bảng
- Là một thùng chứa lưu trữ dữ liệu trong cơ sở dữ liệu.
- Bao gồm các hàng và cột, hỗ trợ việc thêm, cập nhật và xóa dữ liệu.
- Ví dụ về công cụ/hệ thống: bảng Excel, bảng cơ sở dữ liệu SQL (MySQL, PostgreSQL, v.v.).
- Ví dụ trường hợp sử dụng: danh sách khách hàng, bảng tồn kho sản phẩm.
View
- Là một bảng ảo lưu trữ kết quả của một truy vấn (câu lệnh SELECT) trên một bảng.
- Không chứa dữ liệu thực; mỗi lần bạn truy cập, bảng cơ sở dữ liệu sẽ được truy vấn.
- Hữu ích để chỉ hiển thị các cột cụ thể, hoặc tái sử dụng các kết nối và truy vấn phức tạp.
- Thường có trong các cơ sở dữ liệu SQL (MySQL, PostgreSQL, SQL Server, v.v.), thường được gọi là “truy vấn đã lưu” hoặc “bảng ảo”. Các khái niệm tương tự cũng tồn tại trong MongoDB hoặc các công cụ BI.
Sự khác biệt chính
| Mục | Bảng | View |
|---|---|---|
| Lưu trữ dữ liệu | Có (lưu trữ dữ liệu thực) | Không (chỉ định nghĩa) |
| Cập nhật | Có thể | Không theo mặc định (đôi khi có) |
| Trường hợp sử dụng | Lưu trữ dữ liệu | Đơn giản hóa hoặc tùy chỉnh hiển thị |
Phân tích tương tự với quán ăn 🍔
Giải thích trên có thể cảm thấy hơi trừu tượng, vì vậy hãy sử dụng một ví dụ minh họa. Hãy tưởng tượng bạn đang ở một quán ăn.
- 🗄️ : Một bảng trong cơ sở dữ liệu giống như tủ lạnh của quán ăn.
- Bên trong có bánh hamburger, rau xà lách, phô mai, cà chua—các nguyên liệu thực sự (dữ liệu) có thể được sử dụng.
- Bạn có thể thêm nguyên liệu mới (INSERT), loại bỏ những nguyên liệu hết hạn (DELETE), hoặc cập nhật số lượng nguyên liệu (UPDATE).
- 📁 : Một view giống như thực đơn mà khách hàng xem khi đặt hàng. Ví dụ:
- Cheeseburger = bánh mì + thịt + phô mai
- Bữa sáng = bánh kếp + trứng ốp la + thịt xông khói + cà phê
Thực đơn cho thấy cách mà các món ăn được kết hợp, nhưng thực đơn không chứa thực phẩm thực sự.
Mỗi lần có đơn hàng, tủ lạnh (bảng) cung cấp nguyên liệu, đầu bếp chế biến (thực thi SQL), và món ăn được phục vụ.
Tóm lại: dữ liệu thực sự nằm trong tủ lạnh (bảng), còn thực đơn (view) chỉ định nghĩa cách mà nó được trình bày.
Mẹo 1: Truy vấn là gì?
Trong cơ sở dữ liệu, bạn thường nghe từ truy vấn. Một truy vấn chỉ đơn giản là một hướng dẫn hoặc câu hỏi đến cơ sở dữ liệu. Trong SQL, các truy vấn là các lệnh như SELECT, INSERT, UPDATE và DELETE.
Sử dụng ví dụ quán ăn:
- Một truy vấn giống như một đơn hàng/yêu cầu đến phục vụ.
Ví dụ:
- “Hiện tất cả khách hàng sống ở Tokyo” →
SELECT * FROM customers WHERE city='Tokyo'; - “Thêm sản phẩm A vào tồn kho” →
INSERT INTO inventory ...
Mẹo 2: RLS là gì?
RLS (Row Level Security) là một cơ chế thường được sử dụng khi nhiều người dùng chia sẻ cùng một bảng. Nó giới hạn những hàng (bản ghi) mà người dùng có thể xem hoặc thao tác, đảm bảo quản lý dữ liệu an toàn. Sử dụng ví dụ quán ăn, hãy nghĩ về nó như là các khách hàng khác nhau có quyền truy cập vào các thực đơn khác nhau:
- Khách hàng thông thường → chỉ có thể gọi món từ thực đơn tiêu chuẩn (hamburger, bánh sandwich, v.v.)
- Trẻ em → không thể gọi rượu
- Khách quen → có thể gọi các món trong thực đơn bí mật (shake đặc biệt hoặc hamburger giới hạn)
- Quản lý → có thể truy cập mọi thứ, thậm chí thử các món chưa phát hành
- Vai trò cho việc chuẩn bị thực phẩm:
- Nhân viên bán thời gian → có thể nhận đơn nhưng không thể thay đổi công thức hoặc loại bỏ thực phẩm
- Quản lý → có thể sửa đổi công thức (UPDATE) hoặc loại bỏ món ăn (DELETE)
Vì vậy, trong khi tủ lạnh (dữ liệu bảng) là giống nhau cho mọi người,
những gì mỗi khách hàng có thể gọi (các hàng mà họ có thể xem hoặc thao tác) được kiểm soát bởi các quy tắc.
Đó là bản chất của RLS.
Khi nào bạn nên sử dụng Views?
Vậy khi nào bạn thực sự nên sử dụng views? Tất nhiên, điều này phụ thuộc vào tình huống, nhưng đây là một số trường hợp phổ biến:
- Khi bạn chỉ muốn hiển thị một số cột hoặc hàng nhất định
→ Ví dụ, hạn chế những gì người dùng cuối có thể thấy bằng cách chỉ xuất bản một phần của bảng.
- Khi bạn cần ẩn thông tin chỉ dành cho nhà phát triển
→ Các cột nội bộ (như ID nội bộ) không nên được hiển thị cho người dùng cuối có thể bị loại trừ trong một view.
- Khi bạn không muốn viết các truy vấn phức tạp mỗi lần
→ Định nghĩa trước các view cho các truy vấn phổ biến, để bạn có thể tái sử dụng chúng dễ dàng mà không phải lặp lại các câu lệnh SQL dài.
Kết luận
Trong bài viết này, chúng ta đã xem xét sự khác biệt giữa bảng và view, cũng như các khái niệm liên quan như truy vấn và RLS, sử dụng ví dụ quán ăn.
- Bảng = thùng chứa lưu trữ dữ liệu
- View = bảng ảo định nghĩa cách dữ liệu được trình bày
Mặc dù đây là những khái niệm cơ bản, nhưng chúng rất thiết yếu trong phát triển và vận hành thực tế.
Hãy bắt đầu bằng cách hiểu thông qua những ví dụ đơn giản, sau đó thử chạy các truy vấn trong SQL hoặc các công cụ như Supabase để nâng cao hiểu biết của bạn.
Lần này tôi tập trung vào các khái niệm, nhưng tôi có thể viết một bài tiếp theo đề cập đến mã SQL và cú pháp chi tiết hơn (không hứa trước 😅).
Cảm ơn bạn đã đọc!