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.
5.2 KiB
5.2 KiB
收藏网站数据模型
这是一个完整的收藏网站数据模型实现,支持网站收藏、分类管理、标签系统、多链接等功能。
数据库表结构
1. categories (分类表)
id
: 主键name
: 分类名称 (唯一)description
: 分类描述color
: 分类颜色 (十六进制)icon
: 分类图标sort_order
: 排序顺序is_active
: 是否激活user_id
: 用户ID (外键)created_at
: 创建时间updated_at
: 更新时间
2. tags (标签表)
id
: 主键name
: 标签名称description
: 标签描述color
: 标签颜色user_id
: 用户ID (外键)created_at
: 创建时间updated_at
: 更新时间
3. bookmarks (收藏主表)
id
: 主键title
: 收藏标题description
: 收藏描述url
: 网站URLfavicon
: 网站图标screenshot
: 截图路径category_id
: 分类ID (外键)user_id
: 用户ID (外键)is_public
: 是否公开is_favorite
: 是否特别收藏click_count
: 点击次数sort_order
: 排序顺序metadata
: 额外元数据 (JSON)last_visited
: 最后访问时间created_at
: 创建时间updated_at
: 更新时间
4. bookmark_tags (收藏标签关联表)
id
: 主键bookmark_id
: 收藏ID (外键)tag_id
: 标签ID (外键)created_at
: 创建时间
5. bookmark_links (收藏多链接表)
id
: 主键bookmark_id
: 收藏ID (外键)title
: 链接标题url
: 链接URLdescription
: 链接描述type
: 链接类型 (link, download, api等)is_active
: 是否激活sort_order
: 排序顺序created_at
: 创建时间updated_at
: 更新时间
6. bookmark_history (收藏历史表)
id
: 主键bookmark_id
: 收藏ID (外键)user_id
: 用户ID (外键)action
: 操作类型 (visit, favorite, share等)context
: 上下文信息 (JSON)created_at
: 创建时间
使用方法
1. 运行数据库迁移
# 运行迁移
npx knex migrate:latest
# 回滚迁移
npx knex migrate:rollback
2. 插入种子数据
# 插入种子数据
npx knex seed:run
3. 基本操作示例
创建收藏
import BookmarkService from '../services/BookmarkService.js'
const bookmarkData = {
title: "MDN Web Docs",
description: "Mozilla开发者网络",
url: "https://developer.mozilla.org/",
category_id: 1,
user_id: 1,
tags: ["JavaScript", "Web开发"],
links: [
{
title: "JavaScript教程",
url: "https://developer.mozilla.org/zh-CN/docs/Web/JavaScript",
description: "JavaScript完整教程",
type: "tutorial"
}
]
}
const bookmark = await BookmarkService.createBookmark(bookmarkData)
获取收藏列表
// 获取所有收藏
const bookmarks = await BookmarkService.getBookmarks(userId)
// 按分类获取
const categoryBookmarks = await BookmarkService.getBookmarksByCategory(categoryId, userId)
// 按标签获取
const tagBookmarks = await BookmarkService.getBookmarksByTag(tagId, userId)
// 搜索收藏
const searchResults = await BookmarkService.searchBookmarks("JavaScript", userId)
更新收藏
const updateData = {
title: "更新后的标题",
description: "更新后的描述",
tags: ["JavaScript", "React", "Node.js"]
}
const updatedBookmark = await BookmarkService.updateBookmark(bookmarkId, updateData, userId)
删除收藏
await BookmarkService.deleteBookmark(bookmarkId, userId)
4. 高级功能
批量操作
// 批量删除
const results = await BookmarkService.batchOperation('delete', [1, 2, 3], userId)
// 批量移动分类
const results = await BookmarkService.batchOperation('move', [1, 2, 3], userId, { category_id: 2 })
// 批量更新标签
const results = await BookmarkService.batchOperation('tag', [1, 2, 3], userId, { tags: ["新标签"] })
统计信息
const stats = await BookmarkService.getBookmarkStats(userId)
console.log(`总收藏数: ${stats.total}`)
console.log(`特别收藏: ${stats.favorites}`)
console.log(`总点击数: ${stats.totalClicks}`)
快捷访问
const quickAccess = await BookmarkService.getQuickAccess(userId)
console.log('特别收藏:', quickAccess.favorites)
console.log('最近访问:', quickAccess.recent)
console.log('热门收藏:', quickAccess.popular)
模型特性
1. 数据完整性
- 外键约束确保数据一致性
- 用户权限验证防止越权访问
- 必填字段验证
2. 性能优化
- 合理的索引设计
- 分页查询支持
- 关联查询优化
3. 扩展性
- JSON字段支持元数据存储
- 灵活的标签系统
- 多链接支持
- 历史记录追踪
4. 用户体验
- 点击统计
- 收藏状态管理
- 搜索功能
- 分类和标签管理
注意事项
- 确保在运行迁移前数据库连接正常
- 种子数据需要先有用户数据 (user_id = 1)
- 所有操作都需要验证用户权限
- URL格式会自动验证
- 标签和分类名称在同一用户下唯一
扩展建议
- 添加收藏导入/导出功能
- 实现收藏分享功能
- 添加收藏推荐算法
- 支持收藏文件夹功能
- 添加收藏同步功能
- 实现收藏备份和恢复