SQL - 数据库设计,需要建议

时间:2012-07-20 17:04:34

标签: mysql sql

我正在建立每个用户都有不同类别的网站

+----+-----------+---------+
| id | subject   | user_id |
+----+-----------+---------+
|  1 | Math 140  |       2 |
|  2 | ART 240   |       2 |
+----+-----------+---------+

然后每个班级都会有大量的家庭作业文件,Class-Papers文件等等。 在这里,我需要你的帮助。什么是更好的方法:构建一个这样的表:

+----+-----------+--------------------------------------------------+--------------+
| id | subject   | Homework                                         | Class-Papers |
+----+-----------+-----------------------------------------------------------------+
|  1 | Math 140  |  www.example.com/subjects/Math+140/file_name.pdf |   bla-bla    |
|  2 | Math 140  |  www.example.com/subjects/Math+140/file_name.pdf |   bla-bla    |
|  3 | Math 140  |  www.example.com/subjects/Math+140/file_name.pdf |   bla-bla    |
|  4 | ART 240   |  www.example.com/subjects/ART +240/file_name.pdf |   bla-bla    |
|  5 | ART 240   |  www.example.com/subjects/ART +240/file_name.pdf |   bla-bla    |
+----+-----------+--------------------------------------------------+--------------+

而不仅仅是在我想要显示它时分开内容, 或者为每个主题构建一个表,而不仅仅是加载必要的表?

或者,如果您可以提出更好或更常见/有用/更有效的建议,请继续。

2 个答案:

答案 0 :(得分:2)

在尝试此操作之前,您应该阅读有关规范化和关系设计的内容。

这是一对多的关系 - 对此进行建模。

每个主题的表都很疯狂。您必须为每个主题添加一个新表。

更好的解决方案可以简单地通过添加数据来添加新主题。这就是关系模型的全部内容。

不要担心桌子;首先用自然语言思考它。

SUBJECT(微积分)可以有很多课程(差异,整数,多变量)。

课程(微积分)可以有很多部分(数学建筑2号房间的上午9点到10点)。

学生(名字,姓氏,学生ID)可以注册零个或多个部分。给定学生的SECTION列表是TRANSCRIPT。

每个学生每学期都有一个TRANSCRIPT(2012年秋季)。

SECTION可以有零个或多个ASSIGNMENTs。

这些是您在解决这个简单问题时需要的表格。在开始编写SQL之前,请担心名称及其相关性。你很高兴你做到了。

答案 1 :(得分:1)

我绝对不会为每个主题创建一个单独的表。如果你这样做了,那么如果你想要一个像#34;列出学生X"的所有作业的查询,你将不得不根据学生注册的科目访问不同的表。更糟糕的是,每当有人添加新的主题,你必须创建一个新表。如果你决定需要一个新的家庭作业属性,而不是更新一个表,你将不得不更新这些主题表中的每一个。这只是个坏消息。