我对一个示例项目感兴趣,该项目用于演示如何设置数据库并使用 SQL 进行查询。查询将是基本的,例如返回描述包含搜索词或课程总学时的课程。
我最初想到的表格如下,但愿意就如何标准化它们提供建议,请记住这是一个初学者友好的项目。
课程将是高级摘要信息,单元将详细说明每门课程的组成部分,John_courses 是约翰已完成的课程。约翰可能感兴趣,例如他花了多少时间学习......
我认为通常不会为单个用户及其课程创建一个表。相反,您将拥有一张包含所有用户的表,一张用于课程的表,一张用于单元的表,一张将用户链接到其课程的表:
CREATE TABLE Users (
UserID INT PRIMARY KEY,
UserName VARCHAR(50)
);
CREATE TABLE Courses (
CourseID INT PRIMARY KEY,
CourseName VARCHAR(100),
CourseCode VARCHAR(20),
CourseDescription TEXT
);
CREATE TABLE Units (
UnitID INT PRIMARY KEY,
UnitName VARCHAR(100),
Hours FLOAT,
CourseID INT,
FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)
);
CREATE TABLE UserCourses (
UserCourseID INT PRIMARY KEY,
UserID INT,
CourseID INT,
FOREIGN KEY (UserID) REFERENCES Users(UserID),
FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)
);
以下是一些可用于此结构的示例查询。
获取所有名为 John 的用户:
SELECT *
FROM Users
WHERE UserName = 'John';
获取用户“Peter”所修课程的名称:
SELECT C.CourseName
FROM Users U
JOIN UserCourses UC ON U.UserID = UC.UserID
JOIN Courses C ON UC.CourseID = C.CourseID
WHERE U.UserName = 'Peter';
查找 Lucy 在所有课程上花费的总时间:
SELECT SUM(U.Hours) AS TotalHours
FROM Users U
JOIN UserCourses UC ON U.UserID = UC.UserID
JOIN Courses C ON UC.CourseID = C.CourseID
JOIN Units UN ON C.CourseID = UN.CourseID
WHERE U.UserName = 'Lucy';