System catalog (hay còn gọi là data dictionary hoặc metadata repository) là một tập hợp các bảng hoặc cơ sở dữ liệu lưu trữ thông tin về cấu trúc của các đối tượng trong cơ sở dữ liệu như bảng, cột, chỉ mục, người dùng, quyền truy cập, trigger, view, và nhiều thành phần khác. Nó là thành phần quan trọng trong bất kỳ hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) nào vì nó quản lý và cung cấp thông tin về các đối tượng bên trong cơ sở dữ liệu.
Các thành phần của System Catalog
- Tables (Bảng dữ liệu)
- Chứa thông tin về tất cả các bảng trong cơ sở dữ liệu.
- Ví dụ: tên bảng, kiểu bảng (base table hay view), không gian bảng (tablespace).
- Columns (Cột dữ liệu)
- Lưu trữ thông tin về các cột trong mỗi bảng như tên cột, kiểu dữ liệu, độ dài tối đa, giá trị mặc định, giá trị NULL.
- Indexes (Chỉ mục)
- Cung cấp thông tin về các chỉ mục trên các bảng, như kiểu chỉ mục (B-tree, hash), cột nào được chỉ mục, và hiệu suất của chỉ mục.
- Constraints (Ràng buộc)
- Chứa thông tin về các ràng buộc trên bảng, như ràng buộc khóa chính (primary key), khóa ngoại (foreign key), unique, not null, check constraints.
- Users and Roles (Người dùng và Vai trò)
- Ghi lại thông tin về các người dùng và vai trò trong cơ sở dữ liệu, quyền hạn của họ, và các chính sách bảo mật.
- Privileges (Quyền)
- Lưu trữ thông tin về các quyền mà người dùng hoặc vai trò có đối với các đối tượng cơ sở dữ liệu.
- Triggers
- Ghi lại các thông tin về trigger được thiết lập trên các bảng.
- Views (Khung nhìn)
- Lưu trữ định nghĩa của các view, bao gồm tên view và các truy vấn SQL tương ứng.
Ví dụ về System Catalog trong một số hệ quản trị CSDL
- PostgreSQL
- PostgreSQL cung cấp một tập hợp các bảng trong pg_catalog schema. Một số bảng quan trọng:
pg_tables
: Chứa danh sách các bảng trong cơ sở dữ liệu.
pg_columns
: Thông tin về các cột trong bảng.
pg_index
: Thông tin về các chỉ mục.
- MySQL
- MySQL sử dụng cơ sở dữ liệu INFORMATION_SCHEMA:
TABLES
: Chứa thông tin về các bảng.
COLUMNS
: Thông tin về các cột.
KEY_COLUMN_USAGE
: Thông tin về các khóa ngoại và khóa chính.
- SQL Server
- SQL Server có sys schema:
sys.tables
: Chứa thông tin về các bảng.
sys.columns
: Lưu thông tin về cột.
sys.indexes
: Thông tin về các chỉ mục trên bảng.
Cách sử dụng System Catalog
Truy vấn cấu trúc của cơ sở dữ liệu
- Khi cần biết cấu trúc của một bảng hoặc một đối tượng nào đó, bạn có thể thực hiện truy vấn trực tiếp lên system catalog. Ví dụ:
-- PostgreSQL: Lấy danh sách tất cả các bảng
SELECT table_name
FROM pg_catalog.pg_tables
WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema';
-- MySQL: Lấy thông tin về các bảng trong cơ sở dữ liệu
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'ten_csdl';
Quản lý chỉ mục
- Bạn có thể kiểm tra các chỉ mục trên bảng để đảm bảo chúng hoạt động hiệu quả hoặc tìm kiếm các chỉ mục không sử dụng:
-- PostgreSQL: Lấy thông tin các chỉ mục trên bảng
SELECT indexname, indexdef
FROM pg_indexes
WHERE tablename = 'ten_bang';
Theo dõi quyền hạn và bảo mật
- Khi cần kiểm tra ai có quyền truy cập vào một bảng hay đối tượng nào đó, bạn có thể sử dụng system catalog để truy vấn các quyền đã cấp:
-- PostgreSQL: Kiểm tra quyền trên bảng
SELECT grantee, privilege_type
FROM information_schema.role_table_grants
WHERE table_name = 'ten_bang';
Phân tích hiệu suất
- System catalog cũng cung cấp thông tin về hiệu suất, như kích thước của bảng, số bản ghi, và các chỉ số liên quan. Điều này giúp ích trong việc tối ưu hóa cơ sở dữ liệu.
-- PostgreSQL: Lấy kích thước của bảngSELECT pg_size_pretty(pg_total_relation_size('ten_bang'));
Tầm quan trọng của System Catalog
- Quản lý cơ sở dữ liệu: Giúp DBA và lập trình viên dễ dàng quản lý và theo dõi các đối tượng trong cơ sở dữ liệu mà không cần phải tìm kiếm thủ công.
- Bảo mật: Theo dõi và điều chỉnh quyền truy cập, giúp đảm bảo rằng các tài nguyên trong cơ sở dữ liệu được bảo vệ.
- Tối ưu hóa: Thông tin về cấu trúc và chỉ mục có thể được dùng để tối ưu hóa truy vấn và cải thiện hiệu suất.
System catalog là nền tảng của mọi hoạt động quản lý và giám sát trong một cơ sở dữ liệu. Hiểu rõ về nó giúp các bạn khai thác hiệu quả hơn và tối ưu hóa hệ thống.