You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
首页数据表结构设计
1. 实体关系总览
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Category │──────<│ Card │>──────│ Tag │
│ (分类) │ 1:N │ (卡片) │ N:N │ (标签) │
└─────────────┘ └─────────────┘ └─────────────┘
│
│ 1:N
▼
┌─────────────┐
│ Tool │
│ (工具项) │
└─────────────┘
2. 表结构
2.1 Category(分类表)
| 字段 |
类型 |
说明 |
| id |
VARCHAR(36) PK |
主键 UUID |
| name |
VARCHAR(100) |
分类名称 |
| slug |
VARCHAR(100) |
URL-friendly 标识,唯一 |
| image |
VARCHAR(500) |
分类图标/封面 |
| parent_id |
VARCHAR(36) FK |
上级分类,NULL 表示顶级 |
| sort_order |
INT DEFAULT 0 |
排序权重 |
| count |
INT DEFAULT 0 |
该分类下的卡片数量 |
| created_at |
DATETIME |
创建时间 |
| updated_at |
DATETIME |
更新时间 |
索引:
idx_category_parent ON (parent_id)
idx_category_slug ON (slug) UNIQUE
2.2 Card(卡片表)
| 字段 |
类型 |
说明 |
| id |
BIGINT PK AUTO_INCREMENT |
主键 |
| type |
ENUM('text','image','image-text','portfolio','project') |
卡片类型 |
| title |
VARCHAR(255) |
标题 |
| description |
TEXT |
描述内容 |
| aspect_ratio |
DECIMAL(4,2) |
宽高比,用于瀑布流布局 |
| category_id |
VARCHAR(36) FK |
所属分类 |
| created_at |
DATETIME |
创建时间 |
| updated_at |
DATETIME |
更新时间 |
索引:
idx_card_category ON (category_id)
idx_card_type ON (type)
idx_card_created ON (created_at DESC)
2.3 CardImage(卡片图片表)
| 字段 |
类型 |
说明 |
| id |
BIGINT PK AUTO_INCREMENT |
主键 |
| card_id |
BIGINT FK |
所属卡片 |
| url |
VARCHAR(500) |
图片地址 |
| sort_order |
INT DEFAULT 0 |
在卡片内的排序 |
索引:
idx_card_image_card ON (card_id)
2.4 Tag(标签表)
| 字段 |
类型 |
说明 |
| id |
BIGINT PK AUTO_INCREMENT |
主键 |
| name |
VARCHAR(50) |
标签名 |
| slug |
VARCHAR(50) |
URL-friendly 标识,唯一 |
索引:
idx_tag_slug ON (slug) UNIQUE
2.5 CardTag(卡片-标签关联表)
| 字段 |
类型 |
说明 |
| card_id |
BIGINT FK |
卡片 ID |
| tag_id |
BIGINT FK |
标签 ID |
索引:
idx_card_tag_card ON (card_id)
idx_card_tag_tag ON (tag_id)
- PRIMARY KEY (card_id, tag_id)
2.6 Tool(工具项表)
| 字段 |
类型 |
说明 |
| id |
VARCHAR(36) PK |
主键 |
| name |
VARCHAR(50) |
工具名称 |
| slug |
VARCHAR(50) |
标识 |
| icon |
VARCHAR(100) |
图标名称 |
| sort_order |
INT DEFAULT 0 |
排序 |
3. 实体关系说明
| 关系 |
描述 |
| Category → Card |
1:N,一个分类下有多张卡片 |
| Category ↻ Category |
自引用 1:N,分类的层级结构 |
| Card → CardImage |
1:N,一张卡片有多张图片 |
| Card → Tag |
N:N,通过 CardTag 关联 |
| Tool |
独立表,无外键关联 |
4. 设计原则
- 避免外键耦合:CardTag 关联表仅做关联,不级联删除
- 类型安全:Card.type 使用 ENUM 约束,避免字符串污染
- 层级查询优化:Category 自引用通过 parent_id 索引加速
- 瀑布流适配:Card.aspect_ratio 存储小数,精确控制卡片比例
- 扩展性:CardImage 支持多图,Card 支持 N:N 标签关联
5. 示例数据
分类示例
| id |
name |
slug |
parent_id |
| c1 |
全部灵感 |
all |
NULL |
| c2 |
设计 |
design |
c1 |
| c3 |
摄影 |
photo |
c1 |
| c4 |
文字摘录 |
words |
c1 |
| c5 |
项目档案 |
projects |
c1 |
| c6 |
随手收藏 |
inspiration |
c1 |
| c7 |
平面/海报 |
design-graphic |
c2 |
| c8 |
产品/UI |
design-product |
c2 |
卡片示例
| id |
type |
title |
aspect_ratio |
category_id |
| 1 |
image-text |
极简主义海报 |
0.75 |
c7 |
| 2 |
project |
Web 项目展示 |
1.00 |
c8 |
| 3 |
portfolio |
2x2 图集 |
0.67 |
c5 |