以下是一个使用 MySQL 和 Workbench 实现的数据库设计系统,包含 5 张表、主键、外键、索引、函数、视图和触发器:

  1. 用户表
CREATE TABLE users (
    user_id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(50) NOT NULL,
    email VARCHAR(50) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
  1. 文章表
CREATE TABLE articles (
    article_id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(100) NOT NULL,
    body TEXT NOT NULL,
    author_id INT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (author_id) REFERENCES users(user_id) ON DELETE CASCADE
);
  1. 评论表
CREATE TABLE comments (
    comment_id INT PRIMARY KEY AUTO_INCREMENT,
    body TEXT NOT NULL,
    author_id INT NOT NULL,
    article_id INT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (author_id) REFERENCES users(user_id) ON DELETE CASCADE,
    FOREIGN KEY (article_id) REFERENCES articles(article_id) ON DELETE CASCADE
);
  1. 标签表
CREATE TABLE tags (
    tag_id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
  1. 文章标签表
CREATE TABLE article_tags (
    article_id INT NOT NULL,
    tag_id INT NOT NULL,
    FOREIGN KEY (article_id) REFERENCES articles(article_id) ON DELETE CASCADE,
    FOREIGN KEY (tag_id) REFERENCES tags(tag_id) ON DELETE CASCADE,
    PRIMARY KEY (article_id, tag_id)
);

-- 创建索引

CREATE INDEX idx_author_id ON articles(author_id);
CREATE INDEX idx_article_id ON comments(article_id);

-- 创建函数

DELIMITER $$
CREATE FUNCTION fn_calculate_age(dob DATE)
RETURNS INT
BEGIN
    DECLARE age INT;
    SELECT FLOOR(DATEDIFF(CURRENT_DATE(), dob)/365.25) INTO age;
    RETURN age;
END$$
DELIMITER ;

-- 创建视图

CREATE VIEW article_comments AS
SELECT articles.title, COUNT(comments.comment_id) AS total_comments
FROM articles
LEFT JOIN comments ON articles.article_id = comments.article_id
GROUP BY articles.article_id;

-- 创建触发器

DELIMITER $$
CREATE TRIGGER tr_user_created_at
BEFORE INSERT ON users
FOR EACH ROW
BEGIN
    SET NEW.created_at = CURRENT_TIMESTAMP;
END$$
DELIMITER ;
MySQL Workbench 数据库设计系统实战:5 张表示例

原文地址: https://www.cveoy.top/t/topic/ocwB 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录