对于专注于查询课程和内容的 SQL 项目来说,这是一个合适的表配置吗? [已关闭]

问题描述 投票:0回答:1

我对一个示例项目感兴趣,该项目用于演示如何设置数据库并使用 SQL 进行查询。查询将是基本的,例如返回描述包含搜索词或课程总学时的课程。

我最初想到的表格如下,但愿意就如何标准化它们提供建议,请记住这是一个初学者友好的项目。

课程
  • id - int -主键
  • 名称 - str
  • 代码-str
  • 总结 - str
单位
  • id - int - 主键
  • 单位 - 字符串
  • 时间-浮动
  • courseid - int - 外键
约翰_课程
  • id - int - 主键
  • courseid - int - 外键

课程将是高级摘要信息,单元将详细说明每门课程的组成部分,John_courses 是约翰已完成的课程。约翰可能感兴趣,例如他花了多少时间学习......

sql mysql database mariadb datamodel
1个回答
0
投票

我认为通常不会为单个用户及其课程创建一个表。相反,您将拥有一张包含所有用户的表,一张用于课程的表,一张用于单元的表,一张将用户链接到其课程的表:

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';
© www.soinside.com 2019 - 2024. All rights reserved.