# 收藏网站数据模型 这是一个完整的收藏网站数据模型实现,支持网站收藏、分类管理、标签系统、多链接等功能。 ## 数据库表结构 ### 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`: 创建时间 ### 5. bookmark_links (收藏多链接表) - `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. 运行数据库迁移 ```bash # 运行迁移 npx knex migrate:latest # 回滚迁移 npx knex migrate:rollback ``` ### 2. 插入种子数据 ```bash # 插入种子数据 npx knex seed:run ``` ### 3. 基本操作示例 #### 创建收藏 ```javascript 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) ``` #### 获取收藏列表 ```javascript // 获取所有收藏 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) ``` #### 更新收藏 ```javascript const updateData = { title: "更新后的标题", description: "更新后的描述", tags: ["JavaScript", "React", "Node.js"] } const updatedBookmark = await BookmarkService.updateBookmark(bookmarkId, updateData, userId) ``` #### 删除收藏 ```javascript await BookmarkService.deleteBookmark(bookmarkId, userId) ``` ### 4. 高级功能 #### 批量操作 ```javascript // 批量删除 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: ["新标签"] }) ``` #### 统计信息 ```javascript const stats = await BookmarkService.getBookmarkStats(userId) console.log(`总收藏数: ${stats.total}`) console.log(`特别收藏: ${stats.favorites}`) console.log(`总点击数: ${stats.totalClicks}`) ``` #### 快捷访问 ```javascript 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. 实现收藏备份和恢复