问题描述
||
我是一名学习SQL和PHP的学生,我的任务是使用PHP和mySQLi创建学生反馈表单,并且我真的很想了解如何为该项目设计数据库!
我正在创建一个用户可以登录到网页的系统,如果用户是学生,则他们可以看到一个页面,以留下对每个模块(课程)的每节课的反馈。如果他们是一位导师,则他们登录后可以查看反馈,添加包含课程内容的模块,并添加学生帐户。
我不知道哪种方法是为数据库创建表的最佳方法,尤其是因为我知道您不能在表中放置表,因此我要为模块创建一个表,而每个模块中都将有一个表对于每节课,这是一个表,其中包含每个反馈项以及一些其他变量,例如附加消息。
由于我是SQL的新手,如何在不创建数百个表并尝试将它们链接在一起的情况下构造数据库,这似乎是一条漫长而混乱的方法。
几天来,我一直在努力使自己了解数据库,但我不知道该怎么办!
解决方法
您不需要数百张桌子!但是,您将需要使用主键链接它们。这是SQL的精髓,无论您是不是新手,这都是您需要学习的。
本质上,您是在一个表中放置一个表,但是通过匹配键将它们链接在一起:
student_id student_name
1 Bob
2 Jane
comment_id student_id comment_body
123 2 Jane says hi!
124 1 Bob says hi also!
125 1 Bob says hi again!
查询这些表时,可以在SELECT语句中将它们连接在一起:
SELECT student_id,student_name,comment_id,comment_body
FROM student,comment
WHERE student.student_id = comment.student_id
student_id student_name comment_id comment_body
2 Jane 123 Jane says hi!
1 Bob 124 Bob says hi also!
1 Bob 125 Bob says hi again!
您返回的行是两个表的组合,将两个表中的主键(在这种情况下,student_id)相等的地方将两者连接(或联接)在一起。
,数据库表之间可以相互模仿,以模仿您描述为嵌套表的关系。用数据库的说法有1对1关系,1对多关系和多对多关系。如果您想为一个模块拥有多个类,则可以在“类”表中具有一个字段,其中包含该模块所属的模块记录的外键。 (许多类到1个模块)。
如果要将多个学生链接到一个班级,并且要为一个学生设置多个班级,则通常使用单独的表,该表仅包含两个表的外键。那就是您有一个Student_2_Class表,它有一个用于Class_FKey的字段和一个用于Student_FKey的字段,有时这些多对多链接表在需要时还有其他字段。至少您要添加一个约束,即两个外键的组合是唯一的。这样一来,您就不能一次将同一个学生放在同一班上。
我认为我无法教您如何在线程响应中设计数据库,但是您应该能够搜索诸如主键,外键,多对一,一对多,多对多等术语来查找内容。此外,您的学校图书馆可能还会有一些有关“数据建模”的书,这些书可能会对您有所帮助(我喜欢Simsion和Witts数据建模基础知识。Visio具有不错的实体关系图工具(数据库模型通常称为实体关系图),因此您也能够找到显示如何使用它的在线教程,您可能仅通过观看就能掌握一些建模技巧。