首页 > 代码库 > 学习mysql(2)-如何设计数据库(一)

学习mysql(2)-如何设计数据库(一)

在学习mysql(1)中学到了一些基本的操作。

接下来一个比较重要的问题放在我面前,假设现在要实战了,当然得创建数据库咯,但是数据库中一般会涉及到很多表,如果设计不当,逻辑上有些混乱,那么这样的数据库当然不会好用。

在最开始学习这个东西,感觉就是excl嘛,没有什么了不起啊。弄一两个表而已嘛。但是如果我们不管做什么东西都用一个表可能会遇到问题。在learning mysql书中,讲到了一个很好的例子来说明为什么要用多个表:

假设一个学校需要记录学校的每个学生的成绩,那么需要记录该学生的名字,课程,成绩。这时构建的表大概是:

技术分享

但是有些时候学生的名字是一样的,例如上面的表中,有两个Susan Smith都参加了Computing Mathematics课程的考试,那么哪一个成绩对应哪一个学生呢?所以我们还需要向表中添加一个唯一标识的东西,例如学号,此时的表如下:

技术分享

此时,我们还发现表中有一个同学参加了两次Computing Mathematics课程考试,那么这两次课程是该生什么时候考的呢?所以我们还需要添加学年,学期。这个时候表如下:

技术分享

这个时候,这张表看上去没有什么问题了,能够满足记录每个学生的成绩,应该说可以满意了。但是如果仔细看还会发现,怎么学生的名字出现了很多次,这样不是浪费了很逗存储吗?实际上只需要学号就行了啊。这时我们想到了将学生信息和单独存储。这样就会有两个表:

表1 学生信息:

技术分享

表2 考试成绩信息:

技术分享

这时看上去是不是就比较舒服了。

事实上通过以上的例子,我们还可以把课程单独记录一张表,而把考试的信息又记录一张表。这时我们就相当于是把学生看成一个实体,课程也看成一个实体,而考试成绩则是两个实体的关系,也就是著名的ER模型(实体关系模型)。

以上讲了这么多都还没有讲到到底该如何设计一个数据库。那么该如何设计呢?其实从上面的例子中也能看到一些影子。例如刚开始需要弄清楚需要设计一个什么数据库,也就是要把需求搞清楚,上面的例子中从刚开始到后面添加学号信息,添加学年学期信息等;然后再是概念问题,什么是实体什么是关系;最后就是逻辑上的设计,也就是接近创建表了。

更详细的学习笔记见 学习mysql(2)-如何设计数据(二)

学习mysql(2)-如何设计数据库(一)