14a163f50SAndreas Gohr 24a163f50SAndreas Gohr-- logged in users and their info and groups 34a163f50SAndreas Gohr 44a163f50SAndreas GohrCREATE TABLE `users` 5c1d8dc74SAndreas Gohr( 64a163f50SAndreas Gohr `user` TEXT PRIMARY KEY, 74a163f50SAndreas Gohr `dt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, -- last seen 84a163f50SAndreas Gohr `domain` TEXT DEFAULT NULL -- email domain 94a163f50SAndreas Gohr); 104a163f50SAndreas Gohr 114a163f50SAndreas GohrCREATE TABLE `groups` 124a163f50SAndreas Gohr( 134a163f50SAndreas Gohr `user` TEXT NOT NULL REFERENCES `users` (`user`) ON DELETE CASCADE ON UPDATE CASCADE, 144a163f50SAndreas Gohr `group` TEXT NOT NULL, 154a163f50SAndreas Gohr PRIMARY KEY (`user`, `group`) 164a163f50SAndreas Gohr); 174a163f50SAndreas Gohr 184a163f50SAndreas Gohr-- current browsing session 194a163f50SAndreas Gohr 204a163f50SAndreas GohrCREATE TABLE `sessions` 214a163f50SAndreas Gohr( 224a163f50SAndreas Gohr `session` TEXT PRIMARY KEY, 23d5ef99ddSAndreas Gohr `dt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 244a163f50SAndreas Gohr `end` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 254a163f50SAndreas Gohr `uid` TEXT NOT NULL, 264a163f50SAndreas Gohr `user` TEXT NOT NULL REFERENCES `users` (`user`) ON DELETE SET NULL ON UPDATE CASCADE, 27c1d8dc74SAndreas Gohr `ua` TEXT NOT NULL, 28c1d8dc74SAndreas Gohr `ua_info` TEXT NOT NULL, 29c1d8dc74SAndreas Gohr `ua_type` TEXT NOT NULL, 30c1d8dc74SAndreas Gohr `ua_ver` TEXT NOT NULL, 314a163f50SAndreas Gohr `os` TEXT NOT NULL 324a163f50SAndreas Gohr); 334a163f50SAndreas GohrCREATE INDEX `idx_session_dt` ON `sessions` (`dt`); 344a163f50SAndreas GohrCREATE INDEX `idx_session_uid` ON `sessions` (`uid`); 354a163f50SAndreas GohrCREATE INDEX `idx_session_ua_type` ON `sessions` (`ua_type`); 364a163f50SAndreas Gohr 374a163f50SAndreas Gohr-- referrers 384a163f50SAndreas Gohr 394a163f50SAndreas GohrCREATE TABLE `referers` 404a163f50SAndreas Gohr( 414a163f50SAndreas Gohr `id` INTEGER PRIMARY KEY, 424a163f50SAndreas Gohr `url` TEXT NOT NULL, 434a163f50SAndreas Gohr `dt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 444a163f50SAndreas Gohr `type` TEXT NOT NULL DEFAULT 'external' -- 'external', 'search' 454a163f50SAndreas Gohr); 464a163f50SAndreas GohrCREATE UNIQUE INDEX `idx_referers_url` ON `referers` (`url`); 474a163f50SAndreas GohrCREATE INDEX `idx_referers_dt` ON `referers` (`dt`); 484a163f50SAndreas GohrCREATE INDEX `idx_referers_type` ON `referers` (`type`); 494a163f50SAndreas Gohr 504a163f50SAndreas Gohr-- page view logging 514a163f50SAndreas Gohr 524a163f50SAndreas GohrCREATE TABLE `pageviews` 534a163f50SAndreas Gohr( 544a163f50SAndreas Gohr `id` INTEGER PRIMARY KEY, 554a163f50SAndreas Gohr `dt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 564a163f50SAndreas Gohr `ip` TEXT NOT NULL, 57*02aa9b73SAndreas Gohr `session` TEXT NOT NULL REFERENCES `sessions` (`session`) ON DELETE CASCADE ON UPDATE CASCADE, 58*02aa9b73SAndreas Gohr `page` TEXT NOT NULL, 594a163f50SAndreas Gohr `ref_id` INTEGER DEFAULT NULL REFERENCES `referers` (`id`) ON DELETE SET NULL ON UPDATE CASCADE, 60c1d8dc74SAndreas Gohr `screen_x` INTEGER NOT NULL, 61c1d8dc74SAndreas Gohr `screen_y` INTEGER NOT NULL, 62c1d8dc74SAndreas Gohr `view_x` INTEGER NOT NULL, 634a163f50SAndreas Gohr `view_y` INTEGER NOT NULL 64c1d8dc74SAndreas Gohr); 654a163f50SAndreas GohrCREATE INDEX `idx_pageviews_page` ON `pageviews` (`page`); 664a163f50SAndreas GohrCREATE INDEX `idx_pageviews_dt` ON `pageviews` (`dt`); 67c1d8dc74SAndreas Gohr 68c1d8dc74SAndreas GohrCREATE TABLE `iplocation` 69c1d8dc74SAndreas Gohr( 70c1d8dc74SAndreas Gohr `ip` TEXT PRIMARY KEY, 71c1d8dc74SAndreas Gohr `code` TEXT NOT NULL, 72c1d8dc74SAndreas Gohr `country` TEXT NOT NULL, 73c1d8dc74SAndreas Gohr `city` TEXT NOT NULL, 74c1d8dc74SAndreas Gohr `host` TEXT NOT NULL, 75d5ef99ddSAndreas Gohr `lastupd` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP 76c1d8dc74SAndreas Gohr); 77c1d8dc74SAndreas GohrCREATE INDEX `idx_iplocation_code` ON `iplocation` (`code`); 78c1d8dc74SAndreas Gohr 79c1d8dc74SAndreas GohrCREATE TABLE `outlinks` 80c1d8dc74SAndreas Gohr( 81c1d8dc74SAndreas Gohr `id` INTEGER PRIMARY KEY, 82d5ef99ddSAndreas Gohr `dt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 834a163f50SAndreas Gohr `session` TEXT NOT NULL REFERENCES `sessions` (`session`) ON DELETE CASCADE ON UPDATE CASCADE, 84c1d8dc74SAndreas Gohr `link` TEXT NOT NULL, 85c1d8dc74SAndreas Gohr `page` TEXT NOT NULL DEFAULT '' 86c1d8dc74SAndreas Gohr); 874a163f50SAndreas GohrCREATE INDEX `idx_outlinks_link` ON `outlinks` (`link`); 88c1d8dc74SAndreas GohrCREATE INDEX `idx_outlinks_dt` ON `outlinks` (`dt`); 89c1d8dc74SAndreas Gohr 90c1d8dc74SAndreas Gohr 914a163f50SAndreas Gohr-- Search engine query logging for internal searches 92c1d8dc74SAndreas GohrCREATE TABLE `search` 93c1d8dc74SAndreas Gohr( 94c1d8dc74SAndreas Gohr `id` INTEGER PRIMARY KEY, 95d5ef99ddSAndreas Gohr `dt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 96*02aa9b73SAndreas Gohr `ip` TEXT NOT NULL, 97*02aa9b73SAndreas Gohr `session` TEXT NOT NULL REFERENCES `sessions` (`session`) ON DELETE CASCADE ON UPDATE CASCADE, 984a163f50SAndreas Gohr `query` TEXT NOT NULL 99c1d8dc74SAndreas Gohr); 100c1d8dc74SAndreas GohrCREATE INDEX `idx_search_dt` ON `search` (`dt`); 101c1d8dc74SAndreas Gohr 102c1d8dc74SAndreas GohrCREATE TABLE `searchwords` 103c1d8dc74SAndreas Gohr( 104c1d8dc74SAndreas Gohr `sid` INTEGER NOT NULL, 105c1d8dc74SAndreas Gohr `word` TEXT NOT NULL, 1064a163f50SAndreas Gohr FOREIGN KEY (`sid`) REFERENCES `search` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, 107c1d8dc74SAndreas Gohr PRIMARY KEY (`sid`, `word`) 108c1d8dc74SAndreas Gohr); 109c1d8dc74SAndreas Gohr 1104a163f50SAndreas Gohr-- Edit logging for content changes 111c1d8dc74SAndreas GohrCREATE TABLE `edits` 112c1d8dc74SAndreas Gohr( 113c1d8dc74SAndreas Gohr `id` INTEGER PRIMARY KEY, 114d5ef99ddSAndreas Gohr `dt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 115c1d8dc74SAndreas Gohr `ip` TEXT NOT NULL, 1164a163f50SAndreas Gohr `session` TEXT NOT NULL REFERENCES `sessions` (`session`) ON DELETE CASCADE ON UPDATE CASCADE, 117c1d8dc74SAndreas Gohr `page` TEXT NOT NULL, 118c1d8dc74SAndreas Gohr `type` TEXT NOT NULL 119c1d8dc74SAndreas Gohr); 120c1d8dc74SAndreas GohrCREATE INDEX `idx_edits_dt` ON `edits` (`dt`); 121c1d8dc74SAndreas GohrCREATE INDEX `idx_edits_type` ON `edits` (`type`); 122c1d8dc74SAndreas Gohr 123c1d8dc74SAndreas Gohr 124c1d8dc74SAndreas GohrCREATE TABLE `logins` 125c1d8dc74SAndreas Gohr( 126c1d8dc74SAndreas Gohr `id` INTEGER PRIMARY KEY, 127d5ef99ddSAndreas Gohr `dt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 128c1d8dc74SAndreas Gohr `ip` TEXT NOT NULL, 1294a163f50SAndreas Gohr `session` TEXT NOT NULL REFERENCES `sessions` (`session`) ON DELETE CASCADE ON UPDATE CASCADE, 130c1d8dc74SAndreas Gohr `type` TEXT NOT NULL 131c1d8dc74SAndreas Gohr); 132c1d8dc74SAndreas GohrCREATE INDEX `idx_logins_dt` ON `logins` (`dt`); 133c1d8dc74SAndreas GohrCREATE INDEX `idx_logins_type` ON `logins` (`type`); 134c1d8dc74SAndreas Gohr 135c1d8dc74SAndreas Gohr 136c1d8dc74SAndreas Gohr 137c1d8dc74SAndreas GohrCREATE TABLE `media` 138c1d8dc74SAndreas Gohr( 139c1d8dc74SAndreas Gohr `id` INTEGER PRIMARY KEY, 140d5ef99ddSAndreas Gohr `dt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 141c1d8dc74SAndreas Gohr `ip` TEXT, 1424a163f50SAndreas Gohr `session` TEXT NOT NULL REFERENCES `sessions` (`session`) ON DELETE CASCADE ON UPDATE CASCADE, 143*02aa9b73SAndreas Gohr `media` TEXT NOT NULL, 144c1d8dc74SAndreas Gohr `size` INTEGER NOT NULL, 145c1d8dc74SAndreas Gohr `mime1` TEXT NOT NULL, 146c1d8dc74SAndreas Gohr `mime2` TEXT NOT NULL, 147c1d8dc74SAndreas Gohr `inline` INTEGER NOT NULL 148c1d8dc74SAndreas Gohr); 149c1d8dc74SAndreas GohrCREATE INDEX `idx_media_media` ON `media` (`media`); 150c1d8dc74SAndreas GohrCREATE INDEX `idx_media_dt` ON `media` (`dt`); 151c1d8dc74SAndreas GohrCREATE INDEX `idx_media_mime1` ON `media` (`mime1`); 152c1d8dc74SAndreas Gohr 153c1d8dc74SAndreas Gohr 154c1d8dc74SAndreas GohrCREATE TABLE `history` 155c1d8dc74SAndreas Gohr( 156c1d8dc74SAndreas Gohr `info` TEXT NOT NULL, 157d5ef99ddSAndreas Gohr `dt` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 158c1d8dc74SAndreas Gohr `value` INTEGER NOT NULL, 159c1d8dc74SAndreas Gohr PRIMARY KEY (`info`, `dt`) 160c1d8dc74SAndreas Gohr); 161c1d8dc74SAndreas Gohr 162