Repository navigation
Expand file tree
/
Copy pathschema.sql
More file actions
142 lines (128 loc) · 5.47 KB
/
Copy pathschema.sql
File metadata and controls
142 lines (128 loc) · 5.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
-- Phlash CMS — schema MySQL/MariaDB (utf8mb4)
-- Eseguito automaticamente da install.php
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
CREATE TABLE IF NOT EXISTS users (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(32) NOT NULL,
email VARCHAR(190) NOT NULL,
password_hash VARCHAR(255) NOT NULL,
role ENUM('admin','user') NOT NULL DEFAULT 'user',
karma INT NOT NULL DEFAULT 0,
bio TEXT NULL,
status ENUM('active','banned') NOT NULL DEFAULT 'active',
created_at DATETIME NOT NULL,
last_login DATETIME NULL,
api_token_hash CHAR(64) NULL DEFAULT NULL,
UNIQUE KEY uq_username (username),
UNIQUE KEY uq_email (email),
UNIQUE KEY uq_api_token (api_token_hash)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS topics (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(80) NOT NULL,
slug VARCHAR(80) NOT NULL,
description VARCHAR(255) NOT NULL DEFAULT '',
icon VARCHAR(64) NOT NULL DEFAULT '',
sort_order INT NOT NULL DEFAULT 0,
UNIQUE KEY uq_topic_slug (slug)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS stories (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
user_id INT UNSIGNED NOT NULL,
topic_id INT UNSIGNED NOT NULL,
title VARCHAR(200) NOT NULL,
slug VARCHAR(220) NOT NULL,
dept VARCHAR(80) NOT NULL DEFAULT '',
body MEDIUMTEXT NOT NULL,
source_url VARCHAR(500) NULL,
status ENUM('pending','published','rejected') NOT NULL DEFAULT 'pending',
score INT NOT NULL DEFAULT 0,
comment_count INT UNSIGNED NOT NULL DEFAULT 0,
views INT UNSIGNED NOT NULL DEFAULT 0,
created_at DATETIME NOT NULL,
published_at DATETIME NULL,
UNIQUE KEY uq_story_slug (slug),
KEY idx_status_pub (status, published_at),
KEY idx_topic_status (topic_id, status),
CONSTRAINT fk_stories_user FOREIGN KEY (user_id) REFERENCES users(id),
CONSTRAINT fk_stories_topic FOREIGN KEY (topic_id) REFERENCES topics(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS comments (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
story_id INT UNSIGNED NOT NULL,
user_id INT UNSIGNED NULL,
parent_id INT UNSIGNED NULL,
author_name VARCHAR(40) NOT NULL DEFAULT '',
body TEXT NOT NULL,
score INT NOT NULL DEFAULT 1,
ip_hash CHAR(64) NOT NULL DEFAULT '',
status ENUM('visible','hidden') NOT NULL DEFAULT 'visible',
created_at DATETIME NOT NULL,
KEY idx_story_status (story_id, status),
CONSTRAINT fk_comments_story FOREIGN KEY (story_id) REFERENCES stories(id) ON DELETE CASCADE,
CONSTRAINT fk_comments_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL,
CONSTRAINT fk_comments_parent FOREIGN KEY (parent_id) REFERENCES comments(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS votes (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
user_id INT UNSIGNED NOT NULL,
target_type ENUM('story','comment') NOT NULL,
target_id INT UNSIGNED NOT NULL,
value TINYINT NOT NULL,
created_at DATETIME NOT NULL,
UNIQUE KEY uq_vote (user_id, target_type, target_id),
CONSTRAINT fk_votes_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS tags (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(40) NOT NULL,
slug VARCHAR(40) NOT NULL,
UNIQUE KEY uq_tag_name (name),
UNIQUE KEY uq_tag_slug (slug)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS story_tags (
story_id INT UNSIGNED NOT NULL,
tag_id INT UNSIGNED NOT NULL,
PRIMARY KEY (story_id, tag_id),
CONSTRAINT fk_st_story FOREIGN KEY (story_id) REFERENCES stories(id) ON DELETE CASCADE,
CONSTRAINT fk_st_tag FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS polls (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
question VARCHAR(255) NOT NULL,
is_active TINYINT(1) NOT NULL DEFAULT 0,
created_at DATETIME NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS poll_options (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
poll_id INT UNSIGNED NOT NULL,
label VARCHAR(120) NOT NULL,
votes INT UNSIGNED NOT NULL DEFAULT 0,
CONSTRAINT fk_po_poll FOREIGN KEY (poll_id) REFERENCES polls(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS poll_votes (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
poll_id INT UNSIGNED NOT NULL,
option_id INT UNSIGNED NOT NULL,
user_id INT UNSIGNED NULL,
ip_hash CHAR(64) NOT NULL,
created_at DATETIME NOT NULL,
KEY idx_poll_user (poll_id, user_id),
KEY idx_poll_ip (poll_id, ip_hash),
CONSTRAINT fk_pv_poll FOREIGN KEY (poll_id) REFERENCES polls(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS settings (
k VARCHAR(64) PRIMARY KEY,
v TEXT NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS pageviews (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
viewed_at DATETIME NOT NULL,
path VARCHAR(250) NOT NULL,
title VARCHAR(200) NOT NULL DEFAULT '',
visitor CHAR(32) NOT NULL,
KEY idx_viewed (viewed_at),
KEY idx_path_viewed (path, viewed_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
SET FOREIGN_KEY_CHECKS = 1;