Cấu trúc Bảng
TablePro cung cấp giao diện trực quan để khám phá và sửa đổi cấu trúc bảng database. Xem định nghĩa cột, index, foreign key và DDL (câu lệnh CREATE TABLE) cho bất kỳ bảng nào.
Truy Cập Cấu Trúc Bảng
Để xem cấu trúc của bảng:
Chọn Bảng
Click vào tên bảng trong sidebar
Mở Tab Structure
Click tab Structure (bên dưới data grid)
Khám Phá
Điều hướng giữa các tab Columns, Indexes, Foreign Keys và DDL
Hoặc click chuột phải vào bảng và chọn Show Structure.
Tab Columns
Tab Columns hiển thị tất cả định nghĩa cột:
Thông Tin Cột
| Thuộc tính | Mô tả |
|---|
| Name | Tên cột |
| Type | Kiểu dữ liệu (VARCHAR, INT, v.v.) |
| Nullable | Có cho phép giá trị NULL không |
| Default | Giá trị mặc định nếu không chỉ định |
| Extra | Thuộc tính bổ sung (AUTO_INCREMENT, v.v.) |
| Key | Primary key (PRI), Foreign key (FOR), v.v. |
Sao Chép Dạng TSV
Click chuột phải vào structure grid để sao chép định nghĩa cột dạng TSV (giá trị phân tách bằng tab). Điều này hữu ích để dán vào bảng tính hoặc công cụ tài liệu.
Kiểu Dữ Liệu Theo Database
MySQL/MariaDB
PostgreSQL
SQLite
Kiểu dữ liệu MySQL phổ biến:| Danh mục | Loại |
|---|
| Số | INT, BIGINT, DECIMAL, FLOAT, DOUBLE |
| Chuỗi | VARCHAR, TEXT, CHAR, ENUM |
| Ngày/Giờ | DATE, DATETIME, TIMESTAMP, TIME |
| Nhị phân | BLOB, BINARY, VARBINARY |
| JSON | JSON |
Kiểu dữ liệu PostgreSQL phổ biến:| Danh mục | Loại |
|---|
| Số | INTEGER, BIGINT, NUMERIC, REAL |
| Chuỗi | VARCHAR, TEXT, CHAR |
| Ngày/Giờ | DATE, TIMESTAMP, TIMESTAMPTZ, TIME |
| Nhị phân | BYTEA |
| Đặc biệt | JSON, JSONB, ARRAY, UUID, INET |
Type affinity của SQLite:| Affinity | Mô tả |
|---|
| TEXT | Dữ liệu chuỗi |
| INTEGER | Số nguyên có dấu |
| REAL | Số thực dấu phẩy động |
| NUMERIC | Số hoặc văn bản |
| BLOB | Dữ liệu nhị phân |
Tab Indexes
Xem tất cả index được định nghĩa trên bảng:
Thông Tin Index
| Thuộc tính | Mô tả |
|---|
| Name | Tên index |
| Columns | Các cột được bao gồm trong index |
| Type | BTREE, HASH, FULLTEXT, v.v. |
| Unique | Index có ép buộc tính duy nhất không |
| Primary | Đây có phải là primary key không |
Loại Index
| Loại | Sử dụng |
|---|
| PRIMARY | Ràng buộc primary key |
| UNIQUE | Ràng buộc/index unique |
| INDEX | Index thông thường để tăng hiệu suất |
| FULLTEXT | Tìm kiếm full-text (MySQL) |
| SPATIAL | Dữ liệu không gian địa lý (PostGIS) |
Tab Foreign Keys
Xem quan hệ foreign key:
Thông Tin Foreign Key
| Thuộc tính | Mô tả |
|---|
| Name | Tên ràng buộc |
| Column | Cột cục bộ |
| References | Bảng và cột đích |
| On Delete | Hành động khi hàng được tham chiếu bị xóa |
| On Update | Hành động khi hàng được tham chiếu bị cập nhật |
Hành Động Tham Chiếu
| Hành động | Mô tả |
|---|
| RESTRICT | Ngăn delete/update nếu được tham chiếu |
| CASCADE | Delete/update các hàng tham chiếu |
| SET NULL | Đặt cột tham chiếu thành NULL |
| SET DEFAULT | Đặt thành giá trị mặc định |
| NO ACTION | Tương tự RESTRICT (kiểm tra hoãn lại) |
Tab DDL
Xem câu lệnh CREATE TABLE cho bảng:
Sao Chép DDL
- Mở tab DDL
- Chọn tất cả (
Cmd+A)
- Sao chép (
Cmd+C)
Sử dụng DDL cho:
- Tạo lại bảng trong database khác
- Version control cho thay đổi schema
- Tài liệu
- Tạo bảng tương tự
Ví Dụ DDL
CREATE TABLE `users` (
`id` int NOT NULL AUTO_INCREMENT,
`email` varchar(255) NOT NULL,
`name` varchar(100) DEFAULT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`),
KEY `created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE users (
id SERIAL PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
name VARCHAR(100),
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP WITH TIME ZONE
);
CREATE INDEX idx_users_created_at ON users(created_at);
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
email TEXT NOT NULL UNIQUE,
name TEXT,
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
updated_at TEXT
);
CREATE INDEX idx_users_created_at ON users(created_at);
Thông tin bổ sung về bảng có thể được hiển thị:
| Thuộc tính | Mô tả |
|---|
| Engine | Storage engine (MySQL: InnoDB, MyISAM) |
| Collation | Character collation |
| Row Count | Số hàng ước tính |
| Data Size | Kích thước dữ liệu bảng |
| Index Size | Kích thước dữ liệu index |
| Comment | Comment/mô tả bảng |
Sửa Đổi Cấu Trúc
Sửa đổi cấu trúc thay đổi schema database của bạn. Luôn sao lưu dữ liệu quan trọng trước khi thực hiện thay đổi.
Trình Soạn Thảo Cấu Trúc Trực Quan
TablePro cung cấp giao diện trực quan để sửa đổi cấu trúc bảng trực tiếp — không cần SQL:
Thêm Cột
- Mở tab Structure > Columns
- Click nút + để thêm cột mới
- Đặt thuộc tính cột: tên, loại, nullable, mặc định, auto-increment, comment
- Click Apply để xem trước và thực thi các thay đổi
Sửa Đổi Cột
- Click vào cột trong tab Columns
- Chỉnh sửa thuộc tính trong panel chi tiết
- Các thay đổi được theo dõi với hỗ trợ undo/redo
- Click Apply để xem trước SQL ALTER TABLE
Xóa Cột
- Chọn cột cần xóa
- Click nút - hoặc nhấn Delete
- Xác nhận việc xóa
- Apply các thay đổi
Xem Trước Thay Đổi Schema
Trước khi áp dụng các thay đổi cấu trúc, TablePro hiển thị xem trước SQL ALTER TABLE được tạo. Điều này cho phép bạn:
- Xem lại SQL chính xác sẽ được thực thi
- Xác minh các thay đổi phù hợp với ý định của bạn
- Hủy nếu các thay đổi không như mong đợi
Undo/Redo
Các thay đổi cấu trúc hỗ trợ undo/redo đầy đủ:
- Nhấn
Cmd+Z để undo thay đổi
- Nhấn
Cmd+Shift+Z để redo thay đổi
- Các thay đổi được theo dõi cho đến khi áp dụng vào database
- Xem Change Tracking để biết chi tiết
Thêm Cột qua SQL
Bạn cũng có thể thêm cột trực tiếp bằng SQL:
-- MySQL
ALTER TABLE users ADD COLUMN phone VARCHAR(20) AFTER email;
-- PostgreSQL
ALTER TABLE users ADD COLUMN phone VARCHAR(20);
-- SQLite (ALTER TABLE bị giới hạn)
ALTER TABLE users ADD COLUMN phone TEXT;
Sửa Đổi Cột qua SQL
-- MySQL
ALTER TABLE users MODIFY COLUMN name VARCHAR(200) NOT NULL;
-- PostgreSQL
ALTER TABLE users ALTER COLUMN name TYPE VARCHAR(200);
ALTER TABLE users ALTER COLUMN name SET NOT NULL;
-- SQLite (yêu cầu tạo lại bảng)
-- Xem tài liệu SQLite để biết cách giải quyết
Xóa Cột qua SQL
-- MySQL/PostgreSQL
ALTER TABLE users DROP COLUMN phone;
-- SQLite (yêu cầu tạo lại bảng)
Quản Lý Index
-- Tạo index
CREATE INDEX idx_users_email ON users(email);
-- Tạo unique index
CREATE UNIQUE INDEX idx_users_username ON users(username);
-- Xóa index
DROP INDEX idx_users_email ON users; -- MySQL
DROP INDEX idx_users_email; -- PostgreSQL
Quản Lý Foreign Key
-- Thêm foreign key
ALTER TABLE orders
ADD CONSTRAINT fk_orders_user
FOREIGN KEY (user_id) REFERENCES users(id)
ON DELETE CASCADE;
-- Xóa foreign key
ALTER TABLE orders DROP FOREIGN KEY fk_orders_user; -- MySQL
ALTER TABLE orders DROP CONSTRAINT fk_orders_user; -- PostgreSQL
Làm Mới Cấu Trúc
Sau khi thực hiện thay đổi schema:
- Qua sidebar: Click chuột phải vào bảng > Refresh
- Qua menu: View > Refresh
- Tự động: Thay đổi được thực hiện trong TablePro tự động làm mới
Thực Hành Tốt Nhất
Thiết Kế Schema
- Sử dụng kiểu dữ liệu phù hợp: Chọn loại nhỏ nhất phù hợp với dữ liệu của bạn
- Thêm index cho query: Index các cột được sử dụng trong WHERE và JOIN
- Định nghĩa foreign key: Duy trì tính toàn vẹn tham chiếu
- Sử dụng NOT NULL: Khi cột phải luôn có giá trị
- Thêm giá trị mặc định: Cung cấp giá trị mặc định hợp lý cho cột tùy chọn
Quy Ước Đặt Tên
| Phần tử | Quy ước | Ví dụ |
|---|
| Bảng | Số nhiều, snake_case | users, order_items |
| Cột | Số ít, snake_case | user_id, created_at |
| Index | idx_table_columns | idx_users_email |
| Foreign Key | fk_table_reference | fk_orders_user |
| Primary Key | id hoặc table_id | id, user_id |
Cân Nhắc Hiệu Suất
- Primary key: Mọi bảng nên có primary key
- Index foreign key: Index các cột foreign key
- Index tổng hợp: Sắp xếp cột theo tính chọn lọc
- Tránh over-indexing: Index làm chậm ghi
Khắc Phục Sự Cố
Cấu Trúc Không Tải
- Kiểm tra kết nối database
- Xác minh người dùng có quyền xem schema
- Làm mới kết nối
Thiếu Cột
- Làm mới cấu trúc bảng
- Kiểm tra xem cột có được thêm trong transaction chưa commit không
- Xác minh bạn đang xem đúng database/schema
Lỗi Cú Pháp DDL
Khi sao chép DDL sang database khác:
- Kiểm tra sự khác biệt cú pháp cụ thể theo database
- Điều chỉnh kiểu dữ liệu cho database đích
- Xóa tính năng không được hỗ trợ (ví dụ: MySQL ENGINE cho PostgreSQL)
Các Bước Tiếp Theo