💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 信息系统 现在需要开发一套信息系统, 记录系里的学生、课程、 还有选课信息。比如 - 学生信息:[学号,姓名,性别,身份证号,入学日期,班级] - 课程信息:[课程号,课程名,授课老师] - 选课:[学号,课程号,成绩] 可以使用三个独立的文本文件来存储这些信息,比如学生信息: ![image.png](http://upload-images.jianshu.io/upload_images/1323506-1e27effe1ab4831f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 然后`程序`只需要读写这三个文件就可以了。 # 中间层的引入 到了期末,各个老师希望能进行一些统计的工作,比如哪些人不及格,某学科的平均分等等。实际上就是对文件进行`查询`而已。如果每次都使用程序来进行操作,非常麻烦,而且不利于普及。 所以我们可以提供一个`中间层`,把文件层屏蔽掉,让每个人都可以在这个中间层用简单的方法进行查询。我们把数据存放的结构叫`表`,每一列叫`列、字段、属性`。 可以使用简单的`SQL语句`就能查询 ``` SELECT 学号,姓名 FROM 学生信息 WHERE 入学日期='1991-9-1' ``` 然后需要一个`解析器`,可以把`语句`转换为内部对**文件的操作**。这样还可以使用程序来调用`抽象层`来编程啊, 也不用直接操作文件了 使用这样的`SQL语句`最大的好处是**用户完全不用考虑物理层的那些文件的结构,只需要关注逻辑层的“表”就可以了。** ![image.png](http://upload-images.jianshu.io/upload_images/1323506-a9df2c2c49361f74.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 中间的逻辑层的另外的好处是可以**对物理层的文件存储进行优化了**, 为了加快访问速度, 可以**增加了索引、B+树,缓存等手段。** 总结起来,中间层的好处在于: - 对用户屏蔽了底层逻辑,只需要通过SQL语句就可以进行操作了。 - 还可以对物理层的文件存储进行优化,加快访问速度。 # 并发访问 之前的访问都是单机版的,但是如果有若干的客户端连入呢?可能会存在 - 两个客户端同时对一个文件进行修改,所以后修改的会完全覆盖前人的修改。 - 两个客户端同时对一行数据进行修改,会出现数据不一致。 那么怎么办呢? - 基于文件的操作改变成基于行的操作, **每个人的修改只影响这一行**。 这样纵然两个人同时修改一个文件,只要不在同一行都没毛病。 - 修改某行数据的时候,要先给这一行加`锁`。也就是一个人修改的时候,不允许另一个人修改。 # 原子性问题 现在我们已经解决了`并发`写的带来的数据`不一致`的问题,那么还有没有其他的风险点呢?`系统故障`。 比如电子系有1000元, 数学系有2000元 电子系给数学系转账200元, 系统先扣除了电子系的钱,现在余额只有800 ,此时系统崩溃了。 重启以后,就发现电子系的余额是对的, 可是数学系还是2000元, 那200元丢了 所以转账的操作必须是`原子`的: **要么全部发生, 要么根本不发生。 ** 可以把类似`转账`这样的操作叫做“事务”, 但是怎么实现呢?`记录日志 ` 在做真正的操作之前, - 先记录日志:要修改哪一项,原来的值是什么,现在的值是什么 - 然后再修改 - 只有所有的操作都正确无误写入了`磁盘`,才会提交。否则就`回滚` # 权限管理 一个没有权限控制的系统是非常危险的, 尤其是随意删除。 先定义三大类权限: 1. 对**数据**操作的, 例如SELECT, UPDATE, INSERT等 2. 对**结构**操作的, 例如创建表,修改表,等 3. 做**管理**的, 例如备份数据, 创建用户等 然后就可以把这些权限授予某个用户了 ``` GRANT SELECT on 财务表 to 系主任 #只能查询。 GRANT CREATE_TABLE to 张老师:#可以创建表格 ``` 这个系统的中间层完全可以剥离出来,形成一个完整的软件了,也就是`数据库` ![image.png](http://upload-images.jianshu.io/upload_images/1323506-eb201024c6e6464d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) # 参考 - [小李的数据库之旅(上)](https://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=2665513312&idx=1&sn=f0c3e5623cc1042fa486c91c5d0ec6d4&scene=21#wechat_redirect) - [小李的数据库之旅(下)](https://mp.weixin.qq.com/s?__biz=MzAxOTc0NzExNg==&mid=2665513315&idx=1&sn=768b9bc4a5dff80008eec5ca1f80d426&scene=21#wechat_redirect)