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

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

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

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

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

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

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

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

表1 学生信息:

表2 考试成绩信息:

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

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

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

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

时间: 2024-11-02 11:54:07

学习mysql(2)-如何设计数据库(一)的相关文章

重新学习MySQL数据库2:『浅入浅出』MySQL 和 InnoDB

重新学习Mysql数据库2:『浅入浅出』MySQL 和 InnoDB 作为一名开发人员,在日常的工作中会难以避免地接触到数据库,无论是基于文件的 sqlite 还是工程上使用非常广泛的 MySQL.PostgreSQL,但是一直以来也没有对数据库有一个非常清晰并且成体系的认知,所以最近两个月的时间看了几本数据库相关的书籍并且阅读了 MySQL 的官方文档,希望对各位了解数据库的.不了解数据库的有所帮助. 本文中对于数据库的介绍以及研究都是在 MySQL 上进行的,如果涉及到了其他数据库的内容或者

重新学习MySQL数据库4:Mysql索引实现原理

重新学习Mysql数据库4:Mysql索引实现原理 MySQL索引类型 (https://www.cnblogs.com/luyucheng/p/6289714.html) 一.简介 MySQL目前主要有以下几种索引类型: 1.普通索引 2.唯一索引 3.主键索引 4.组合索引 5.全文索引 二.语句 CREATE TABLE table_name[col_name data type][unique|fulltext][index|key][index_name](col_name[lengt

这38个小技巧告诉你如何快速学习MySQL数据库2

1.如何快速掌握MySQL? ⑴培养兴趣兴趣是最好的老师,不论学习什么知识,兴趣都可以极大地提高学习效率.当然学习MySQL 5.6也不例外.⑵夯实基础计算机领域的技术非常强调基础,刚开始学习可能还认识不到这一点,随着技术应用的深 入,只有有着扎实的基础功底,才能在技术的道路上走得更快.更远.对于MySQL的学习来说, SQL语句是其中最为基础的部分,很多操作都是通过SQL语句来实现的.所以在学习的过程中, 读者要多编写SQL语句,对于同一个功能,使用不同的实现语句来完成,从而深刻理解其不同之处

这38个小技巧告诉你如何快速学习MySQL数据库

1.如何快速掌握MySQL? ⑴培养兴趣兴趣是最好的老师,不论学习什么知识,兴趣都可以极大地提高学习效率.当然学习MySQL 5.6也不例外.⑵夯实基础计算机领域的技术非常强调基础,刚开始学习可能还认识不到这一点,随着技术应用的深 入,只有有着扎实的基础功底,才能在技术的道路上走得更快.更远.对于MySQL的学习来说, SQL语句是其中最为基础的部分,很多操作都是通过SQL语句来实现的.所以在学习的过程中, 读者要多编写SQL语句,对于同一个功能,使用不同的实现语句来完成,从而深刻理解其不同之处

烂泥:学习mysql数据库主从同步复制原理

本文由秀依林枫提供友情赞助,首发于烂泥行天下. 说明本篇文章部分转载自互联网. MySQL的Replication(英文为复制)是一个多MySQL数据库做主从同步的方案,特点是异步复制,广泛用在各种对MySQL有更高性能.更高可靠性要求的场合.与之对应的是另一个同步技术是MySQL Cluster,但因为MySQL Cluster配置比较复杂,所以使用者较少. MySQL的Replication是一个异步复制的过程(mysql5.1.7以上版本分为异步复制和半同步两种模式),它是从一个Mysql

重新学习MySQL数据库10:MySQL里的那些日志们

重新学习MySQL数据库10:MySQL里的那些日志们 同大多数关系型数据库一样,日志文件是MySQL数据库的重要组成部分.MySQL有几种不同的日志文件,通常包括错误日志文件,二进制日志,通用日志,慢查询日志,等等.这些日志可以帮助我们定位mysqld内部发生的事件,数据库性能故障,记录数据的变更历史,用户恢复数据库等等.本文主要描述错误日志文件. 1.MySQL日志文件系统的组成 a.错误日志:记录启动.运行或停止mysqld时出现的问题. b.通用日志:记录建立的客户端连接和执行的语句.

重新学习MySQL数据库5:根据MySQL索引原理进行分析与优化

重新学习MySQL数据库5:根据MySQL索引原理进行分析与优化 一:Mysql原理与慢查询 MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色,但所谓"好马配好鞍",如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如"精通MySQL"."SQL语句优化"."了解数据库原理"等要求.我们知道一般的应用系统,读写比例在10:1左右,而且插入

重新学习MySQL数据库3:Mysql存储引擎与数据存储原理

重新学习Mysql数据库3:Mysql存储引擎与数据存储原理 数据库的定义 很多开发者在最开始时其实都对数据库有一个比较模糊的认识,觉得数据库就是一堆数据的集合,但是实际却比这复杂的多,数据库领域中有两个词非常容易混淆,也就是数据库和实例: 数据库:物理操作文件系统或其他形式文件类型的集合: 实例:MySQL 数据库由后台线程以及一个共享内存区组成: 对于数据库和实例的定义都来自于 MySQL 技术内幕:InnoDB 存储引擎 一书,想要了解 InnoDB 存储引擎的读者可以阅读这本书籍. 数据

重新学习MySQL数据库1:无废话MySQL入门

重新学习Mysql数据库1:无废话MySQL入门 开始使用 我下面所有的SQL语句是基于MySQL 5.6+运行. MySQL 为关系型数据库(Relational Database Management System),一个关系型数据库由一个或数个表格组成, 如图所示的一个表格: 表头(header): 每一列的名称; 列(col): 具有相同数据类型的数据的集合; 行(row): 每一行用来描述某个人/物的具体信息; 值(value): 行的具体信息, 每个值必须与该列的数据类型相同; 键(