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.
 
 
 
 

4.4 KiB

首页数据表结构设计

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. 设计原则

  1. 避免外键耦合:CardTag 关联表仅做关联,不级联删除
  2. 类型安全:Card.type 使用 ENUM 约束,避免字符串污染
  3. 层级查询优化:Category 自引用通过 parent_id 索引加速
  4. 瀑布流适配:Card.aspect_ratio 存储小数,精确控制卡片比例
  5. 扩展性: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