很多学生或者说是初学者在学习完成数据库的基础增删改查后就自认为在数据库这里就很熟悉了,但是不接触项目根本部知道需求,我这里准备了50个项目的基本需求来让大家来熟练各类项目的列信息,让大家更好的深入项目进行实战式的练习,可以让大家在后面面试的时候有更多更丰富的资历让大家可以与面试官侃侃而谈。
MySQL版本:5.7.31-log
数据库字符集,所有数据库通用字符集与排序规则,支持中文数据。
字符集:utf8 排序规则:utf8_general_ci
使用工具:Navicat Premium 15,可以在下面的连接中下载
https://download.csdn.net/download/feng8403000/89403778
活动报名系统是一个在线平台,旨在方便用户浏览、了解和报名参加各类活动。该系统提供活动信息发布、活动报名管理、用户信息维护以及报名状态跟踪等功能。用户可以通过该系统查看活动的详细信息,如活动名称、时间、地点、费用等,并在线进行报名操作。管理员则可以在后台管理系统中发布活动信息、管理报名用户以及查看报名统计等。
为了直接运行DDL语句并创建表,我们需要确保在创建含有外键约束的表之前,相关的被引用表(即外键指向的表)已经存在。所以我们在创建表的时候一定要按照一定的顺序来创建,否则就会出现没有外键关系导致的创建异常。
-- 用户表
CREATE TABLE Users (
user_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID',
username VARCHAR(50) NOT NULL COMMENT '用户名',
password VARCHAR(255) NOT NULL COMMENT '密码',
name VARCHAR(100) NOT NULL COMMENT '用户姓名',
email VARCHAR(100) COMMENT '电子邮箱',
gender ENUM('男', '女') NOT NULL COMMENT '性别',
phone VARCHAR(20) COMMENT '电话号码'
);
-- 活动表
CREATE TABLE Events (
event_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '活动ID',
event_name VARCHAR(100) NOT NULL COMMENT '活动名称',
event_description TEXT COMMENT '活动描述',
start_date DATE NOT NULL COMMENT '开始日期',
end_date DATE NOT NULL COMMENT '结束日期',
location VARCHAR(255) COMMENT '活动地点',
fee DECIMAL(10, 2) COMMENT '活动费用',
max_participants INT DEFAULT NULL COMMENT '最大参与人数',
created_by INT COMMENT '创建者ID',
FOREIGN KEY (created_by) REFERENCES Users(user_id)
);
-- 活动类别表
CREATE TABLE EventCategories (
category_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '类别ID',
category_name VARCHAR(100) NOT NULL COMMENT '类别名称'
);
-- 活动与类别的关联表
CREATE TABLE EventCategoriesMapping (
mapping_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '关联ID',
event_id INT NOT NULL COMMENT '活动ID',
category_id INT NOT NULL COMMENT '类别ID',
FOREIGN KEY (event_id) REFERENCES Events(event_id),
FOREIGN KEY (category_id) REFERENCES EventCategories(category_id)
);
-- 报名表
CREATE TABLE Registrations (
registration_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '报名ID',
user_id INT NOT NULL COMMENT '用户ID',
event_id INT NOT NULL COMMENT '活动ID',
registration_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '报名日期',
status ENUM('待处理', '已批准', '已拒绝', '已取消') NOT NULL DEFAULT '待处理' COMMENT '报名状态',
FOREIGN KEY (user_id) REFERENCES Users(user_id),
FOREIGN KEY (event_id) REFERENCES Events(event_id)
);
-- 报名备注表(可选,用于记录报名的额外信息或备注)
CREATE TABLE RegistrationNotes (
note_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '备注ID',
registration_id INT NOT NULL COMMENT '报名ID',
note TEXT NOT NULL COMMENT '备注内容',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
FOREIGN KEY (registration_id) REFERENCES Registrations(registration_id)
);
插入数据的时候也要注意主外键关系,如果没有外检的情况下是没有办法插入从表数据的。
-- 用户表
INSERT INTO Users (username, password, name, email, gender, phone) VALUES
('郭靖', '123', '郭靖', 'guojing@example.com', '男', '13800138000'),
('黄蓉', '123', '黄蓉', 'huangrong@example.com', '女', '13900139000'),
('杨过', '123', '杨过', 'yangguo@example.com', '男', '13700137000');
-- 活动类别表
INSERT INTO EventCategories (category_name) VALUES
('文艺活动'),
('体育活动'),
('科技活动'),
('公益活动');
-- 活动表
INSERT INTO Events (event_name, event_description, start_date, end_date, location, fee, max_participants, created_by) VALUES
('经典电影回顾', '观看经典电影并分享感受', '2023-10-01', '2023-10-01', '电影院', 50.00, 50, 1),
('城市马拉松', '参加城市马拉松赛事', '2023-11-01', '2023-11-01', '市体育场', 200.00, 200, 2),
('AI技术研讨会', '探讨AI技术的发展与应用', '2023-12-01', '2023-12-01', '会议中心', 100.00, 100, 3);
-- 活动与类别的关联表
INSERT INTO EventCategoriesMapping (event_id, category_id) VALUES
(1, 1), -- 经典电影回顾 属于 文艺活动
(2, 2), -- 城市马拉松 属于 体育活动
(3, 3); -- AI技术研讨会 属于 科技活动
-- 报名表
INSERT INTO Registrations (user_id, event_id) VALUES
(1, 1), -- 郭靖报名经典电影回顾
(2, 2), -- 黄蓉报名城市马拉松
(3, 3), -- 杨过报名AI技术研讨会
(1, 3), -- 郭靖再次报名AI技术研讨会
(2, 1); -- 黄蓉也报名经典电影回顾
-- 报名备注表(假设我们为郭靖的第二次报名添加备注)
INSERT INTO RegistrationNotes (registration_id, note) VALUES
(5, '郭靖对AI技术非常感兴趣,请尽快审核报名');
遵循的数据库三范式
数据库建表的三范式(3NF,Third Normal Form)是关系型数据库设计的基本原则,用于确保数据库结构的逻辑性和减少数据冗余。这三个范式是逐步细化的,每一个范式都是在前一个范式的基础上建立的。下面我将详细解释这三个范式:
第一范式(1NF, First Normal Form)
定义:
解释:
第二范式(2NF, Second Normal Form)
定义:
解释:
第三范式(3NF, Third Normal Form)
定义:
解释: