CREATE TABLE `users` ( `user_id` INT PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(50) UNIQUE NOT NULL, `email` VARCHAR(255) UNIQUE NOT NULL, `password` VARCHAR(255) NOT NULL, `role` ENUM ('admin', 'author', 'subscriber') NOT NULL DEFAULT 'subscriber', `created_at` TIMESTAMP DEFAULT (CURRENT_TIMESTAMP) ); CREATE TABLE `posts` ( `post_id` INT PRIMARY KEY AUTO_INCREMENT, `title` VARCHAR(255) NOT NULL, `content` TEXT NOT NULL, `author_id` INT NOT NULL, `created_at` TIMESTAMP DEFAULT (CURRENT_TIMESTAMP), `updated_at` TIMESTAMP DEFAULT (CURRENT_TIMESTAMP) ); CREATE TABLE `comments` ( `comment_id` INT PRIMARY KEY AUTO_INCREMENT, `post_id` INT NOT NULL, `user_id` INT NOT NULL, `content` TEXT NOT NULL, `created_at` TIMESTAMP DEFAULT (CURRENT_TIMESTAMP) ); CREATE TABLE `tags` ( `tag_id` INT PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(50) UNIQUE NOT NULL ); CREATE TABLE `post_tags` ( `post_id` INT, `tag_id` INT, PRIMARY KEY (`post_id`, `tag_id`) ); CREATE TABLE `categories` ( `category_id` INT PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(50) UNIQUE NOT NULL, `parent_category_id` INT ); CREATE TABLE `post_categories` ( `post_id` INT, `category_id` INT, PRIMARY KEY (`post_id`, `category_id`) ); CREATE TABLE `roles` ( `role_id` INT PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(50) UNIQUE NOT NULL ); CREATE TABLE `permissions` ( `permission_id` INT PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(50) UNIQUE NOT NULL ); CREATE TABLE `role_permissions` ( `role_id` INT, `permission_id` INT, PRIMARY KEY (`role_id`, `permission_id`) ); CREATE TABLE `user_roles` ( `user_id` INT, `role_id` INT, PRIMARY KEY (`user_id`, `role_id`) ); ALTER TABLE `posts` ADD FOREIGN KEY (`author_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE; ALTER TABLE `comments` ADD FOREIGN KEY (`post_id`) REFERENCES `posts` (`post_id`) ON DELETE CASCADE; ALTER TABLE `comments` ADD FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE; ALTER TABLE `post_tags` ADD FOREIGN KEY (`post_id`) REFERENCES `posts` (`post_id`) ON DELETE CASCADE; ALTER TABLE `post_tags` ADD FOREIGN KEY (`tag_id`) REFERENCES `tags` (`tag_id`) ON DELETE CASCADE; ALTER TABLE `categories` ADD FOREIGN KEY (`parent_category_id`) REFERENCES `categories` (`category_id`) ON DELETE CASCADE; ALTER TABLE `post_categories` ADD FOREIGN KEY (`post_id`) REFERENCES `posts` (`post_id`) ON DELETE CASCADE; ALTER TABLE `post_categories` ADD FOREIGN KEY (`category_id`) REFERENCES `categories` (`category_id`) ON DELETE CASCADE; ALTER TABLE `role_permissions` ADD FOREIGN KEY (`role_id`) REFERENCES `roles` (`role_id`) ON DELETE CASCADE; ALTER TABLE `role_permissions` ADD FOREIGN KEY (`permission_id`) REFERENCES `permissions` (`permission_id`) ON DELETE CASCADE; ALTER TABLE `user_roles` ADD FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE CASCADE; ALTER TABLE `user_roles` ADD FOREIGN KEY (`role_id`) REFERENCES `roles` (`role_id`) ON DELETE CASCADE;