database-design
17
总安装量
12
周安装量
#20357
全站排名
安装命令
npx skills add https://github.com/leavesfly/jimi --skill database-design
Agent 安装分布
claude-code
9
opencode
7
trae
6
codex
6
antigravity
5
Skill 文档
æ°æ®åºè®¾è®¡è§èæè½å
è®¾è®¡é«æãå¯ç»´æ¤çæ°æ®åºç»æã
表设计åå
1. å½åè§è
表åï¼
- å°å忝 + ä¸å线
- 使ç¨å¤æ°å½¢å¼
- 示ä¾ï¼
users,order_items,user_profiles
åæ®µåï¼
- å°å忝 + ä¸å线
- è§åç¥æ
- 示ä¾ï¼
created_at,user_id,email_address
ç´¢å¼åï¼
-- 主é®ï¼pk_表å
PRIMARY KEY pk_users
-- å¯ä¸ç´¢å¼ï¼uk_表å_åæ®µå
UNIQUE INDEX uk_users_email
-- æ®éç´¢å¼ï¼idx_表å_åæ®µå
INDEX idx_users_created_at
-- å¤é®ï¼fk_表å_å
³è表å
FOREIGN KEY fk_orders_users
2. åæ®µç±»åéæ©
| æ°æ®ç±»å | 使ç¨åºæ¯ | ç¤ºä¾ |
|---|---|---|
| INT/BIGINT | IDãæ°éãå¹´é¾ | user_id BIGINT |
| VARCHAR | åé¿å符串 | name VARCHAR(100) |
| CHAR | å®é¿å符串 | country_code CHAR(2) |
| TEXT | é¿ææ¬ | description TEXT |
| DECIMAL | éé¢ã精确æ°å¼ | price DECIMAL(10,2) |
| DATETIME | æ¥ææ¶é´ | created_at DATETIME |
| ENUM | åºå®é项 | status ENUM('active','inactive') |
| BOOLEAN | å¸å°å¼ | is_deleted BOOLEAN |
注æï¼
- é¿å ä½¿ç¨ FLOAT/DOUBLE åå¨éé¢
- VARCHAR é¿åº¦è®¾ç½®åçï¼é¿å è¿å¤§ï¼
- æ¶é´å段ç»ä¸ä½¿ç¨ DATETIME æ TIMESTAMP
3. 主é®è®¾è®¡
æ¨èï¼
-- èªå¢IDï¼éååæºï¼
id BIGINT AUTO_INCREMENT PRIMARY KEY
-- éªè±IDï¼éååå¸å¼ï¼
id BIGINT PRIMARY KEY COMMENT 'éªè±ID'
-- UUIDï¼åå¸å¼åºæ¯ï¼
id CHAR(36) PRIMARY KEY COMMENT 'UUID'
é¿å ï¼
- ä¸å¡å段ä½ä¸ºä¸»é®ï¼å¦ææºå·ãé®ç®±ï¼
- èå主é®ï¼å¤æåº¦é«ï¼
4. å¤é®çº¦æ
使ç¨å¤é®çä¼å¿ï¼
- æ°æ®å®æ´æ§ä¿è¯
- 级èæä½
ä¸ä½¿ç¨å¤é®çåºæ¯ï¼
- é«å¹¶åç³»ç»ï¼æ§è½èèï¼
- ååºåè¡¨åºæ¯
- å¾®æå¡æ¶æ
-- å¤é®ç¤ºä¾
FOREIGN KEY (user_id)
REFERENCES users(id)
ON DELETE CASCADE
ON UPDATE CASCADE
ç´¢å¼è®¾è®¡
1. ç´¢å¼ç±»å
主é®ç´¢å¼ï¼
PRIMARY KEY (id)
å¯ä¸ç´¢å¼ï¼
UNIQUE INDEX uk_users_email (email)
æ®éç´¢å¼ï¼
INDEX idx_users_created_at (created_at)
èåç´¢å¼ï¼éµå¾ªæå·¦åç¼ååï¼ï¼
INDEX idx_users_name_age (name, age)
-- å¯ä»¥èµ°ç´¢å¼: WHERE name = 'xxx'
-- å¯ä»¥èµ°ç´¢å¼: WHERE name = 'xxx' AND age = 25
-- ä¸èµ°ç´¢å¼: WHERE age = 25
å ¨æç´¢å¼ï¼
FULLTEXT INDEX ft_articles_content (content)
2. ç´¢å¼ä¼ååå
使¶å建索å¼ï¼
- â WHERE åå¥å¸¸ç¨å段
- â ORDER BY åæ®µ
- â JOIN å ³èåæ®µ
- â æ¥è¯¢é¢çé«çåæ®µ
使¶é¿å ç´¢å¼ï¼
- â æ°æ®éå¤åº¦é«çåæ®µï¼å¦æ§å«ï¼
- â é¢ç¹æ´æ°çåæ®µ
- â å°è¡¨ï¼å ¨è¡¨æ«ææ´å¿«ï¼
ç´¢å¼å¤±æåºæ¯ï¼
-- â å¨ç´¢å¼åä¸ä½¿ç¨å½æ°
WHERE YEAR(created_at) = 2025
-- â æ¹ä¸º
WHERE created_at >= '2025-01-01' AND created_at < '2026-01-01'
-- â æ¨¡ç³æ¥è¯¢å导模ç³
WHERE name LIKE '%å¼ %'
-- â æ¹ä¸º
WHERE name LIKE 'å¼ %'
-- â ç±»å转æ¢
WHERE user_id = '123' -- user_id æ¯ INT
-- â æ¹ä¸º
WHERE user_id = 123
SQL ä¼å
1. æ¥è¯¢ä¼å
**é¿å SELECT ***ï¼
-- â 䏿¨è
SELECT * FROM users;
-- â æ¨è
SELECT id, name, email FROM users;
ä½¿ç¨ LIMITï¼
SELECT id, name FROM users LIMIT 100;
é¿å N+1 æ¥è¯¢ï¼
-- â N+1 é®é¢
SELECT * FROM orders; -- æ¥è¯¢ N 个订å
-- ç¶åå¾ªç¯æ¥è¯¢æ¯ä¸ªè®¢åçç¨æ·
SELECT * FROM users WHERE id = ?;
-- â ä½¿ç¨ JOIN
SELECT o.*, u.name
FROM orders o
JOIN users u ON o.user_id = u.id;
2. å页ä¼å
ä¼ ç»å页ï¼å¤§åç§»éæ§è½å·®ï¼ï¼
SELECT * FROM users LIMIT 100000, 20;
ä¼åæ¹æ¡ï¼ä½¿ç¨ ID èå´ï¼ï¼
SELECT * FROM users
WHERE id > 100000
ORDER BY id
LIMIT 20;
使ç¨è¦çç´¢å¼ï¼
SELECT id, name FROM users
WHERE status = 'active'
ORDER BY created_at
LIMIT 20;
3. COUNT ä¼å
é¿å COUNT(*)ï¼
-- â æ
¢
SELECT COUNT(*) FROM users WHERE status = 'active';
-- â 使ç¨è¿ä¼¼å¼ï¼å¦ç¼åï¼
-- æè
宿ç»è®¡åå°å¦ä¸ä¸ªè¡¨
èå¼è®¾è®¡
第ä¸èå¼ï¼1NFï¼
æ¯ä¸ªåæ®µé½æ¯ä¸å¯åå²çååå¼
第äºèå¼ï¼2NFï¼
æ¶é¤é¨åä¾èµï¼é主é®å段å®å ¨ä¾èµä¸»é®ï¼
第ä¸èå¼ï¼3NFï¼
æ¶é¤ä¼ éä¾èµï¼é主é®å段ä¸ä¾èµå ¶ä»é主é®å段ï¼
åèå¼å
ä¸ºäºæ§è½éå½å使°æ®ï¼
-- 订å表åä½ç¨æ·åï¼é¿å
é¢ç¹JOINï¼
CREATE TABLE orders (
id BIGINT PRIMARY KEY,
user_id BIGINT,
user_name VARCHAR(100), -- åä½å段
total_amount DECIMAL(10,2)
);
常ç¨å段
æ ååæ®µ
id BIGINT AUTO_INCREMENT PRIMARY KEY,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
is_deleted BOOLEAN DEFAULT FALSE,
created_by BIGINT,
updated_by BIGINT
ä¹è§é
version INT NOT NULL DEFAULT 0
软å é¤
deleted_at DATETIME NULL,
is_deleted BOOLEAN DEFAULT FALSE
ååºå表
åç´æå
æä¸å¡æ¨¡åæå表
æ°´å¹³æå
-- æ user_id 忍¡
user_0, user_1, user_2, ...
-- ææ¶é´å表
order_202501, order_202502, ...
æä½³å®è·µ
- å¿ é¡»åæ®µï¼id, created_at, updated_at
- ç»ä¸å符éï¼utf8mb4
- ç»ä¸æ¶åºï¼UTC
- é¿å NULLï¼å°½éä½¿ç¨ NOT NULL + DEFAULT
- åçä½¿ç¨æ³¨éï¼COMMENT ‘åæ®µè¯´æ’
- 宿å¤ä»½ï¼èªå¨åå¤ä»½æºå¶
- çæ§æ ¢æ¥è¯¢ï¼å¼å¯ slow_query_log