discourse/migrations/common/intermediate_db_schema/000_base_schema.sql

375 lines
8.6 KiB
SQL

/*
This file is auto-generated from the Discourse core database schema. Instead of editing it directly,
please update the `schema.yml` configuration file and re-run the `generate_schema` script to update it.
*/
CREATE TABLE badges (
id INTEGER NOT NULL PRIMARY KEY,
name TEXT NOT NULL,
description TEXT,
badge_type_id INTEGER NOT NULL,
created_at DATETIME NOT NULL,
multiple_grant BOOLEAN NOT NULL,
query TEXT,
long_description TEXT,
image_upload_id INTEGER,
bage_group TEXT
);
CREATE TABLE categories (
id INTEGER NOT NULL PRIMARY KEY,
name TEXT NOT NULL,
color TEXT NOT NULL,
created_at DATETIME NOT NULL,
slug TEXT NOT NULL,
description TEXT,
text_color TEXT NOT NULL,
read_restricted BOOLEAN NOT NULL,
position INTEGER,
parent_category_id INTEGER,
about_topic_title TEXT,
old_relative_url TEXT,
existing_id INTEGER,
permissions JSON_TEXT,
logo_upload_id TEXT,
tag_group_ids JSON_TEXT
);
CREATE TABLE category_custom_fields (
category_id INTEGER NOT NULL,
name TEXT NOT NULL,
value TEXT,
PRIMARY KEY (category_id, name)
);
CREATE TABLE config (
name TEXT NOT NULL PRIMARY KEY,
value TEXT NOT NULL
);
CREATE TABLE group_members (
group_id INTEGER,
user_id INTEGER,
owner BOOLEAN,
PRIMARY KEY (group_id, user_id)
);
CREATE TABLE groups (
id INTEGER NOT NULL PRIMARY KEY,
name TEXT NOT NULL,
full_name TEXT,
visibility_level INTEGER NOT NULL,
messageable_level INTEGER,
mentionable_level INTEGER,
members_visibility_level INTEGER NOT NULL,
description TEXT
);
CREATE TABLE likes (
post_id INTEGER NOT NULL,
user_id INTEGER NOT NULL,
created_at DATETIME NOT NULL,
PRIMARY KEY (user_id, post_id)
);
CREATE TABLE log_entries (
created_at DATETIME NOT NULL,
type TEXT NOT NULL,
message TEXT NOT NULL,
exception TEXT,
details TEXT
);
CREATE TABLE muted_users (
user_id INTEGER NOT NULL,
muted_user_id INTEGER NOT NULL,
PRIMARY KEY (user_id, muted_user_id)
);
CREATE TABLE permalink_normalizations (
normalization TEXT NOT NULL PRIMARY KEY
);
CREATE TABLE poll_options (
id INTEGER NOT NULL PRIMARY KEY,
poll_id INTEGER NOT NULL,
created_at DATETIME,
text TEXT NOT NULL,
position INTEGER
);
CREATE TABLE poll_votes (
poll_option_id INTEGER NOT NULL,
user_id INTEGER NOT NULL,
created_at DATETIME,
PRIMARY KEY (poll_option_id, user_id)
);
CREATE TABLE polls (
id INTEGER NOT NULL PRIMARY KEY,
post_id INTEGER,
name TEXT NOT NULL,
close_at DATETIME,
type INTEGER NOT NULL,
status INTEGER NOT NULL,
results INTEGER NOT NULL,
visibility INTEGER NOT NULL,
min INTEGER,
max INTEGER,
step INTEGER,
anonymous_voters INTEGER,
created_at DATETIME NOT NULL,
chart_type INTEGER NOT NULL,
groups TEXT,
title TEXT
);
CREATE TABLE post_custom_fields (
post_id INTEGER NOT NULL,
name TEXT NOT NULL,
value TEXT,
PRIMARY KEY (post_id, name)
);
CREATE TABLE posts (
id INTEGER NOT NULL PRIMARY KEY,
user_id INTEGER,
topic_id INTEGER NOT NULL,
post_number INTEGER NOT NULL,
raw TEXT NOT NULL,
created_at DATETIME NOT NULL,
like_count INTEGER NOT NULL,
reply_to_post_id TEXT,
original_raw TEXT,
upload_ids JSON_TEXT,
old_relative_url TEXT,
accepted_answer BOOLEAN,
small_action TEXT,
whisper BOOLEAN,
placeholders JSON_TEXT
);
CREATE INDEX posts_by_topic_post_number ON posts (topic_id, post_number);
CREATE TABLE schema_migrations (
path TEXT NOT NULL PRIMARY KEY,
created_at DATETIME
);
CREATE TABLE site_settings (
name TEXT NOT NULL,
value TEXT,
action TEXT
);
CREATE TABLE tag_groups (
id INTEGER NOT NULL PRIMARY KEY,
name TEXT NOT NULL
);
CREATE TABLE tag_users (
tag_id INTEGER NOT NULL,
user_id INTEGER NOT NULL,
notification_level INTEGER NOT NULL,
PRIMARY KEY (tag_id, user_id)
);
CREATE TABLE tags (
id INTEGER NOT NULL PRIMARY KEY,
name TEXT NOT NULL,
tag_group_id INTEGER
);
CREATE TABLE topic_tags (
topic_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
PRIMARY KEY (topic_id, tag_id)
);
CREATE TABLE topic_users (
user_id INTEGER NOT NULL,
topic_id INTEGER NOT NULL,
last_read_post_number INTEGER,
last_visited_at DATETIME,
first_visited_at DATETIME,
notification_level INTEGER NOT NULL,
notifications_changed_at DATETIME,
notifications_reason_id INTEGER,
total_msecs_viewed INTEGER NOT NULL,
PRIMARY KEY (user_id, topic_id)
);
CREATE TABLE topics (
id INTEGER NOT NULL PRIMARY KEY,
title TEXT NOT NULL,
created_at DATETIME NOT NULL,
views INTEGER NOT NULL,
user_id INTEGER,
category_id INTEGER,
visible BOOLEAN NOT NULL,
closed BOOLEAN NOT NULL,
archived BOOLEAN NOT NULL,
pinned_at DATETIME,
subtype TEXT,
pinned_globally BOOLEAN NOT NULL,
pinned_until DATETIME,
old_relative_url TEXT,
private_message TEXT
);
CREATE TABLE uploads (
id INTEGER NOT NULL PRIMARY KEY,
user_id INTEGER NOT NULL,
filename TEXT NOT NULL,
relative_path TEXT,
type TEXT,
data BLOB
);
CREATE TABLE user_badges (
badge_id INTEGER NOT NULL,
user_id INTEGER NOT NULL,
granted_at DATETIME NOT NULL
);
CREATE TABLE user_field_values (
user_id INTEGER NOT NULL,
field_id INTEGER NOT NULL,
is_multiselect_field BOOLEAN NOT NULL,
value TEXT
);
CREATE UNIQUE INDEX user_field_values_multiselect ON user_field_values (user_id, field_id, value) WHERE is_multiselect_field = TRUE;
CREATE UNIQUE INDEX user_field_values_not_multiselect ON user_field_values (user_id, field_id) WHERE is_multiselect_field = FALSE;
CREATE TABLE user_fields (
id INTEGER NOT NULL PRIMARY KEY,
name TEXT NOT NULL,
field_type TEXT NOT NULL,
editable BOOLEAN NOT NULL,
description TEXT NOT NULL,
required BOOLEAN NOT NULL,
show_on_profile BOOLEAN NOT NULL,
position INTEGER,
show_on_user_card BOOLEAN NOT NULL,
searchable BOOLEAN NOT NULL,
options JSON_TEXT
);
CREATE TABLE users (
id INTEGER NOT NULL PRIMARY KEY,
username TEXT NOT NULL,
created_at DATETIME,
name TEXT,
last_seen_at DATETIME,
admin BOOLEAN NOT NULL,
trust_level INTEGER,
approved BOOLEAN NOT NULL,
approved_at DATETIME,
date_of_birth DATE,
moderator BOOLEAN,
registration_ip_address TEXT,
staged BOOLEAN,
email TEXT,
avatar_path TEXT,
avatar_url TEXT,
avatar_upload_id TEXT,
bio TEXT,
password TEXT,
suspension TEXT,
location TEXT,
website TEXT,
old_relative_url TEXT,
sso_record TEXT,
anonymized BOOLEAN,
original_username TEXT,
timezone TEXT,
email_level INTEGER,
email_messages_level INTEGER,
email_digests BOOLEAN
);
/*
Core table columns implicitly excluded from the generated schema above via the `include` configuration option
in `schema.yml`. This serves as an inventory of these columns, allowing new core additions to be tracked and,
if necessary, synchronized with the intermediate database schema.
Table: groups
--------------
created_at datetime false
automatic boolean false
user_count integer false
automatic_membership_email_domains text true
primary_group boolean false
title string true
grant_trust_level integer true
incoming_email string true
has_messages boolean false
flair_bg_color string true
flair_color string true
bio_raw text true
bio_cooked text true
allow_membership_requests boolean false
default_notification_level integer false
public_exit boolean false
public_admission boolean false
membership_request_template text true
smtp_server string true
smtp_port integer true
smtp_ssl boolean true
imap_server string true
imap_port integer true
imap_ssl boolean true
imap_mailbox_name string false
imap_uid_validity integer false
imap_last_uid integer false
email_username string true
email_password string true
publish_read_state boolean false
imap_last_error text true
imap_old_emails integer true
imap_new_emails integer true
flair_icon string true
flair_upload_id integer true
allow_unknown_sender_topic_replies boolean false
smtp_enabled boolean true
smtp_updated_at datetime true
smtp_updated_by_id integer true
imap_enabled boolean true
imap_updated_at datetime true
imap_updated_by_id integer true
email_from_alias string true
Table: site_settings
---------------------
id integer false
data_type integer false
created_at datetime false
Table: tag_groups
------------------
created_at datetime false
parent_tag_id integer true
one_per_topic boolean true
Table: tags
------------
created_at datetime false
pm_topic_count integer false
target_tag_id integer true
description string true
public_topic_count integer false
staff_topic_count integer false
Table: user_badges
-------------------
id integer false
granted_by_id integer false
post_id integer true
notification_id integer true
seq integer false
featured_rank integer true
created_at datetime false
is_favorite boolean true
*/