34 lines
1.5 KiB
SQL
34 lines
1.5 KiB
SQL
/* Replace with your SQL commands */
|
|
CREATE TABLE discussion_posts (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
type VARCHAR(50) NOT NULL,
|
|
poster_id INT NOT NULL,
|
|
title VARCHAR(100) NOT NULL,
|
|
content JSON NOT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
is_deleted BOOLEAN DEFAULT FALSE,
|
|
is_locked BOOLEAN DEFAULT FALSE,
|
|
is_open BOOLEAN GENERATED ALWAYS AS (
|
|
NOT is_deleted
|
|
AND NOT is_locked
|
|
) STORED,
|
|
FOREIGN KEY (poster_id) REFERENCES members(id) ON DELETE CASCADE
|
|
);
|
|
CREATE TABLE discussion_comments (
|
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
|
post_id INT NOT NULL,
|
|
poster_id INT NOT NULL,
|
|
content TEXT NOT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
is_deleted BOOLEAN DEFAULT FALSE,
|
|
FOREIGN KEY (post_id) REFERENCES discussion_posts(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (poster_id) REFERENCES members(id) ON DELETE CASCADE
|
|
);
|
|
CREATE INDEX idx_discussion_posts_title ON discussion_posts(title);
|
|
CREATE INDEX idx_discussion_posts_type ON discussion_posts(type);
|
|
CREATE INDEX idx_discussion_posts_poster_id ON discussion_posts(poster_id);
|
|
CREATE INDEX idx_discussion_comments_post_id ON discussion_comments(post_id);
|
|
CREATE INDEX idx_discussion_comments_poster_id ON discussion_comments(poster_id);
|
|
CREATE INDEX idx_discussion_posts_is_open ON discussion_posts(is_open); |