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

收藏网站数据模型

这是一个完整的收藏网站数据模型实现,支持网站收藏、分类管理、标签系统、多链接等功能。

数据库表结构

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: 网站URL
  • favicon: 网站图标
  • 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: 创建时间
  • id: 主键
  • bookmark_id: 收藏ID (外键)
  • title: 链接标题
  • url: 链接URL
  • description: 链接描述
  • 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. 用户体验

  • 点击统计
  • 收藏状态管理
  • 搜索功能
  • 分类和标签管理

注意事项

  1. 确保在运行迁移前数据库连接正常
  2. 种子数据需要先有用户数据 (user_id = 1)
  3. 所有操作都需要验证用户权限
  4. URL格式会自动验证
  5. 标签和分类名称在同一用户下唯一

扩展建议

  1. 添加收藏导入/导出功能
  2. 实现收藏分享功能
  3. 添加收藏推荐算法
  4. 支持收藏文件夹功能
  5. 添加收藏同步功能
  6. 实现收藏备份和恢复