14a163f50SAndreas Gohr-- logged in users and their info and groups 24a163f50SAndreas Gohr 34a163f50SAndreas GohrCREATE TABLE `users` 4c1d8dc74SAndreas Gohr( 54a163f50SAndreas Gohr `user` TEXT PRIMARY KEY, 64a163f50SAndreas Gohr `dt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- last seen 74a163f50SAndreas Gohr `domain` TEXT DEFAULT NULL -- email domain 84a163f50SAndreas Gohr); 94a163f50SAndreas Gohr 104a163f50SAndreas GohrCREATE TABLE `groups` 114a163f50SAndreas Gohr( 124a163f50SAndreas Gohr `user` TEXT NOT NULL REFERENCES `users` (`user`) ON DELETE CASCADE ON UPDATE CASCADE, 134a163f50SAndreas Gohr `group` TEXT NOT NULL, 144a163f50SAndreas Gohr PRIMARY KEY (`user`, `group`) 154a163f50SAndreas Gohr); 164a163f50SAndreas Gohr 174a163f50SAndreas Gohr-- current browsing session 184a163f50SAndreas Gohr 194a163f50SAndreas GohrCREATE TABLE `sessions` 204a163f50SAndreas Gohr( 214a163f50SAndreas Gohr `session` TEXT PRIMARY KEY, 22d5ef99ddSAndreas Gohr `dt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 234a163f50SAndreas Gohr `end` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 244a163f50SAndreas Gohr `uid` TEXT NOT NULL, 25*41d1fffcSAndreas Gohr `user` TEXT DEFAULT NULL REFERENCES `users` (`user`) ON DELETE SET NULL ON UPDATE CASCADE, 26c1d8dc74SAndreas Gohr `ua` TEXT NOT NULL, 27c1d8dc74SAndreas Gohr `ua_info` TEXT NOT NULL, 28c1d8dc74SAndreas Gohr `ua_type` TEXT NOT NULL, 29c1d8dc74SAndreas Gohr `ua_ver` TEXT NOT NULL, 304a163f50SAndreas Gohr `os` TEXT NOT NULL 314a163f50SAndreas Gohr); 324a163f50SAndreas GohrCREATE INDEX `idx_session_dt` ON `sessions` (`dt`); 334a163f50SAndreas GohrCREATE INDEX `idx_session_uid` ON `sessions` (`uid`); 344a163f50SAndreas GohrCREATE INDEX `idx_session_ua_type` ON `sessions` (`ua_type`); 354a163f50SAndreas Gohr 364a163f50SAndreas Gohr-- referrers 374a163f50SAndreas Gohr 384a163f50SAndreas GohrCREATE TABLE `referers` 394a163f50SAndreas Gohr( 404a163f50SAndreas Gohr `id` INTEGER PRIMARY KEY, 414a163f50SAndreas Gohr `url` TEXT NOT NULL, 424a163f50SAndreas Gohr `dt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 43*41d1fffcSAndreas Gohr `engine` TEXT DEFAULT NULL -- search engine if it is a search engine referrer 444a163f50SAndreas Gohr); 454a163f50SAndreas GohrCREATE UNIQUE INDEX `idx_referers_url` ON `referers` (`url`); 464a163f50SAndreas GohrCREATE INDEX `idx_referers_dt` ON `referers` (`dt`); 47*41d1fffcSAndreas GohrCREATE INDEX `idx_referers_engine` ON `referers` (`engine`); 484a163f50SAndreas Gohr 494a163f50SAndreas Gohr-- page view logging 504a163f50SAndreas Gohr 514a163f50SAndreas GohrCREATE TABLE `pageviews` 524a163f50SAndreas Gohr( 534a163f50SAndreas Gohr `id` INTEGER PRIMARY KEY, 544a163f50SAndreas Gohr `dt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 554a163f50SAndreas Gohr `ip` TEXT NOT NULL, 5602aa9b73SAndreas Gohr `session` TEXT NOT NULL REFERENCES `sessions` (`session`) ON DELETE CASCADE ON UPDATE CASCADE, 5702aa9b73SAndreas Gohr `page` TEXT NOT NULL, 584a163f50SAndreas Gohr `ref_id` INTEGER DEFAULT NULL REFERENCES `referers` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, 59c1d8dc74SAndreas Gohr `screen_x` INTEGER NOT NULL, 60c1d8dc74SAndreas Gohr `screen_y` INTEGER NOT NULL, 61c1d8dc74SAndreas Gohr `view_x` INTEGER NOT NULL, 624a163f50SAndreas Gohr `view_y` INTEGER NOT NULL 63c1d8dc74SAndreas Gohr); 644a163f50SAndreas GohrCREATE INDEX `idx_pageviews_page` ON `pageviews` (`page`); 654a163f50SAndreas GohrCREATE INDEX `idx_pageviews_dt` ON `pageviews` (`dt`); 66c1d8dc74SAndreas Gohr 67c1d8dc74SAndreas GohrCREATE TABLE `iplocation` 68c1d8dc74SAndreas Gohr( 69c1d8dc74SAndreas Gohr `ip` TEXT PRIMARY KEY, 70c1d8dc74SAndreas Gohr `code` TEXT NOT NULL, 71c1d8dc74SAndreas Gohr `country` TEXT NOT NULL, 72c1d8dc74SAndreas Gohr `city` TEXT NOT NULL, 73c1d8dc74SAndreas Gohr `host` TEXT NOT NULL, 74d5ef99ddSAndreas Gohr `lastupd` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP 75c1d8dc74SAndreas Gohr); 76c1d8dc74SAndreas GohrCREATE INDEX `idx_iplocation_code` ON `iplocation` (`code`); 77c1d8dc74SAndreas Gohr 78c1d8dc74SAndreas GohrCREATE TABLE `outlinks` 79c1d8dc74SAndreas Gohr( 80c1d8dc74SAndreas Gohr `id` INTEGER PRIMARY KEY, 81d5ef99ddSAndreas Gohr `dt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 824a163f50SAndreas Gohr `session` TEXT NOT NULL REFERENCES `sessions` (`session`) ON DELETE CASCADE ON UPDATE CASCADE, 83c1d8dc74SAndreas Gohr `link` TEXT NOT NULL, 84c1d8dc74SAndreas Gohr `page` TEXT NOT NULL DEFAULT '' 85c1d8dc74SAndreas Gohr); 864a163f50SAndreas GohrCREATE INDEX `idx_outlinks_link` ON `outlinks` (`link`); 87c1d8dc74SAndreas GohrCREATE INDEX `idx_outlinks_dt` ON `outlinks` (`dt`); 88c1d8dc74SAndreas Gohr 89c1d8dc74SAndreas Gohr 904a163f50SAndreas Gohr-- Search engine query logging for internal searches 91c1d8dc74SAndreas GohrCREATE TABLE `search` 92c1d8dc74SAndreas Gohr( 93c1d8dc74SAndreas Gohr `id` INTEGER PRIMARY KEY, 94d5ef99ddSAndreas Gohr `dt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 9502aa9b73SAndreas Gohr `ip` TEXT NOT NULL, 9602aa9b73SAndreas Gohr `session` TEXT NOT NULL REFERENCES `sessions` (`session`) ON DELETE CASCADE ON UPDATE CASCADE, 974a163f50SAndreas Gohr `query` TEXT NOT NULL 98c1d8dc74SAndreas Gohr); 99c1d8dc74SAndreas GohrCREATE INDEX `idx_search_dt` ON `search` (`dt`); 100c1d8dc74SAndreas Gohr 101c1d8dc74SAndreas GohrCREATE TABLE `searchwords` 102c1d8dc74SAndreas Gohr( 103c1d8dc74SAndreas Gohr `sid` INTEGER NOT NULL, 104c1d8dc74SAndreas Gohr `word` TEXT NOT NULL, 1054a163f50SAndreas Gohr FOREIGN KEY (`sid`) REFERENCES `search` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, 106c1d8dc74SAndreas Gohr PRIMARY KEY (`sid`, `word`) 107c1d8dc74SAndreas Gohr); 108c1d8dc74SAndreas Gohr 1094a163f50SAndreas Gohr-- Edit logging for content changes 110c1d8dc74SAndreas GohrCREATE TABLE `edits` 111c1d8dc74SAndreas Gohr( 112c1d8dc74SAndreas Gohr `id` INTEGER PRIMARY KEY, 113d5ef99ddSAndreas Gohr `dt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 114c1d8dc74SAndreas Gohr `ip` TEXT NOT NULL, 1154a163f50SAndreas Gohr `session` TEXT NOT NULL REFERENCES `sessions` (`session`) ON DELETE CASCADE ON UPDATE CASCADE, 116c1d8dc74SAndreas Gohr `page` TEXT NOT NULL, 117c1d8dc74SAndreas Gohr `type` TEXT NOT NULL 118c1d8dc74SAndreas Gohr); 119c1d8dc74SAndreas GohrCREATE INDEX `idx_edits_dt` ON `edits` (`dt`); 120c1d8dc74SAndreas GohrCREATE INDEX `idx_edits_type` ON `edits` (`type`); 121c1d8dc74SAndreas Gohr 122c1d8dc74SAndreas Gohr 123c1d8dc74SAndreas GohrCREATE TABLE `logins` 124c1d8dc74SAndreas Gohr( 125c1d8dc74SAndreas Gohr `id` INTEGER PRIMARY KEY, 126d5ef99ddSAndreas Gohr `dt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 127c1d8dc74SAndreas Gohr `ip` TEXT NOT NULL, 128af93d154SAndreas Gohr `user` TEXT NOT NULL, -- no references to users, as this is for all logins, including failed ones 129c1d8dc74SAndreas Gohr `type` TEXT NOT NULL 130c1d8dc74SAndreas Gohr); 131c1d8dc74SAndreas GohrCREATE INDEX `idx_logins_dt` ON `logins` (`dt`); 132c1d8dc74SAndreas GohrCREATE INDEX `idx_logins_type` ON `logins` (`type`); 133c1d8dc74SAndreas Gohr 134c1d8dc74SAndreas Gohr 135c1d8dc74SAndreas Gohr 136c1d8dc74SAndreas GohrCREATE TABLE `media` 137c1d8dc74SAndreas Gohr( 138c1d8dc74SAndreas Gohr `id` INTEGER PRIMARY KEY, 139d5ef99ddSAndreas Gohr `dt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 140c1d8dc74SAndreas Gohr `ip` TEXT, 1414a163f50SAndreas Gohr `session` TEXT NOT NULL REFERENCES `sessions` (`session`) ON DELETE CASCADE ON UPDATE CASCADE, 14202aa9b73SAndreas Gohr `media` TEXT NOT NULL, 143c1d8dc74SAndreas Gohr `size` INTEGER NOT NULL, 144c1d8dc74SAndreas Gohr `mime1` TEXT NOT NULL, 145c1d8dc74SAndreas Gohr `mime2` TEXT NOT NULL, 146c1d8dc74SAndreas Gohr `inline` INTEGER NOT NULL 147c1d8dc74SAndreas Gohr); 148c1d8dc74SAndreas GohrCREATE INDEX `idx_media_media` ON `media` (`media`); 149c1d8dc74SAndreas GohrCREATE INDEX `idx_media_dt` ON `media` (`dt`); 150c1d8dc74SAndreas GohrCREATE INDEX `idx_media_mime1` ON `media` (`mime1`); 151c1d8dc74SAndreas Gohr 152c1d8dc74SAndreas Gohr 153c1d8dc74SAndreas GohrCREATE TABLE `history` 154c1d8dc74SAndreas Gohr( 155c1d8dc74SAndreas Gohr `info` TEXT NOT NULL, 156d5ef99ddSAndreas Gohr `dt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 157c1d8dc74SAndreas Gohr `value` INTEGER NOT NULL, 158c1d8dc74SAndreas Gohr PRIMARY KEY (`info`, `dt`) 159c1d8dc74SAndreas Gohr); 160c1d8dc74SAndreas Gohr 161