rss_schema.sql 4.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. -- TrendRadar RSS 数据库表结构
  2. -- 用于存储 RSS/Atom 订阅源数据
  3. -- ============================================
  4. -- RSS 源配置表
  5. -- 存储订阅源的基本信息
  6. -- ============================================
  7. CREATE TABLE IF NOT EXISTS rss_feeds (
  8. id TEXT PRIMARY KEY, -- 源 ID(如 "hacker-news")
  9. name TEXT NOT NULL, -- 显示名称(如 "Hacker News")
  10. feed_url TEXT DEFAULT '', -- RSS/Atom URL(可选,配置文件中已有)
  11. is_active INTEGER DEFAULT 1, -- 是否启用
  12. last_fetch_time TEXT, -- 最后抓取时间
  13. last_fetch_status TEXT, -- 最后抓取状态(success/failed)
  14. item_count INTEGER DEFAULT 0, -- 当日条目数
  15. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  16. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  17. );
  18. -- ============================================
  19. -- RSS 条目表
  20. -- 以 URL + feed_id 为唯一标识,支持去重存储
  21. -- ============================================
  22. CREATE TABLE IF NOT EXISTS rss_items (
  23. id INTEGER PRIMARY KEY AUTOINCREMENT,
  24. title TEXT NOT NULL, -- 标题
  25. feed_id TEXT NOT NULL, -- 所属 RSS 源
  26. url TEXT NOT NULL, -- 文章链接
  27. published_at TEXT, -- RSS 发布时间(ISO 格式)
  28. summary TEXT, -- 摘要/描述
  29. author TEXT, -- 作者
  30. first_crawl_time TEXT NOT NULL, -- 首次抓取时间
  31. last_crawl_time TEXT NOT NULL, -- 最后抓取时间
  32. crawl_count INTEGER DEFAULT 1, -- 抓取次数
  33. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  34. updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  35. FOREIGN KEY (feed_id) REFERENCES rss_feeds(id)
  36. );
  37. -- ============================================
  38. -- 抓取记录表
  39. -- 记录每次抓取的时间和数量
  40. -- ============================================
  41. CREATE TABLE IF NOT EXISTS rss_crawl_records (
  42. id INTEGER PRIMARY KEY AUTOINCREMENT,
  43. crawl_time TEXT NOT NULL UNIQUE, -- 抓取时间(HH:MM)
  44. total_items INTEGER DEFAULT 0, -- 总条目数
  45. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  46. );
  47. -- ============================================
  48. -- 抓取来源状态表
  49. -- 记录每次抓取各 RSS 源的成功/失败状态
  50. -- ============================================
  51. CREATE TABLE IF NOT EXISTS rss_crawl_status (
  52. crawl_record_id INTEGER NOT NULL,
  53. feed_id TEXT NOT NULL,
  54. status TEXT NOT NULL CHECK(status IN ('success', 'failed')),
  55. error_message TEXT, -- 失败时的错误信息
  56. PRIMARY KEY (crawl_record_id, feed_id),
  57. FOREIGN KEY (crawl_record_id) REFERENCES rss_crawl_records(id),
  58. FOREIGN KEY (feed_id) REFERENCES rss_feeds(id)
  59. );
  60. -- ============================================
  61. -- 推送记录表
  62. -- 用于 push_window once_per_day 功能
  63. -- ============================================
  64. CREATE TABLE IF NOT EXISTS rss_push_records (
  65. id INTEGER PRIMARY KEY AUTOINCREMENT,
  66. date TEXT NOT NULL UNIQUE, -- 日期(YYYY-MM-DD)
  67. pushed INTEGER DEFAULT 0, -- 是否已推送
  68. push_time TEXT, -- 推送时间
  69. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  70. );
  71. -- ============================================
  72. -- 索引定义
  73. -- ============================================
  74. -- RSS 源索引
  75. CREATE INDEX IF NOT EXISTS idx_rss_feed ON rss_items(feed_id);
  76. -- 发布时间索引(用于按时间排序)
  77. CREATE INDEX IF NOT EXISTS idx_rss_published ON rss_items(published_at DESC);
  78. -- 抓取时间索引(用于查询最新数据)
  79. CREATE INDEX IF NOT EXISTS idx_rss_crawl_time ON rss_items(last_crawl_time);
  80. -- 标题索引(用于标题搜索)
  81. CREATE INDEX IF NOT EXISTS idx_rss_title ON rss_items(title);
  82. -- URL + feed_id 唯一索引(实现去重)
  83. CREATE UNIQUE INDEX IF NOT EXISTS idx_rss_url_feed
  84. ON rss_items(url, feed_id);
  85. -- 抓取状态索引
  86. CREATE INDEX IF NOT EXISTS idx_rss_crawl_status_record ON rss_crawl_status(crawl_record_id);