数据量的不断发展,增多,记录数据的方式也要有革新。
现在的人工智能,是让机器去学习大量的数据。
随着数据的量增大,就需要一种方式去存储和查找数据。
计算机中用数字化的存储方式,保存和查找都非常方便。
数据库:为了存储大量数据,和快速查找。
并且做成分布式(不仅存在一个硬盘中)
自学部分:要求印象中有这个东西,将来可以去查找
数据库特点:优化读写,能够在大量的数据中找到所需
MySQL是关系型数据库,基本设计模型为E-R关系模型。
90%工作量都在查询
大多数在乌班图中做。
人类对“0”的认知是非常不容易的
数据库简单介绍
- 数据库系统解决的问题:持久化存储,优化读写,保证数据的有效性
- 当前使用的数据库,主要分为两类
1 文档型,如sqlite,就是一个文件,通过对文件的复制完成数据库的复制——手机、平板电脑等
2 服务型,如mysql、postgre,数据存储在一个物理文件中,但是需要使用终端以tcp/ip协议连接,进行数据库的读写操作——可以执行命令
E-R模型
当前物理的数据库都是按照E-R模型进行设计的
E表示entry,实体
R表示relationship,关系
一个实体转换为数据库中的一个表
关系描述两个实体之间的对应规则,包括
- 一对一
- 一对多
- 多对多
关系转换为数据库表中的一个列 *在关系型数据库中一行就是一个对象
关系同样也是一种数据,也需要被存储
数据库设计的规范:(范式)
经过研究和对使用中问题的总结,对于设计数据库提出了一些规范,这些规范被称为范式
- 第一范式(1NF):列不可拆分
- 第二范式(2NF):唯一标识
- 第三范式(3NF):引用主键
说明:后一个范式,都是在前一个范式的基础上建立的
第一范式:列不可拆分,姓和名是两个信息,要考虑分开放还是一起放;是否可拆分基于当前想要实现的需求,够用就行。
第二范式:唯一标识,可以通过一个属性,唯一地找到这个数据。
第三范式:引用主键,引用关系的时候只能引用主键。
数据库完整性
*意思就是说要保证数据的正确
- 一个数据库就是一个完整的业务单元,可以包含多张表,数据被存储在表中
- 在表中为了更加准确的存储数据,保证数据的正确有效,可以在创建表的时候,为表添加一些强制性的验证,包括数据字段的类型、约束
字段类型
在mysql中包含的数据类型很多,这里主要列出来常用的几种
数字:int,decimal
字符串:char,varchar(有限),text(大文本,不确定有多少字符)
日期:datetime
布尔:bit
*decimal(5,2)一共包含5位数,小数包含两位。
*text比如添加某商品的信息,不确定有多少, 所以要用text
*char 和 varchar的区别,var变量可变的意思
*char(8)如果不够右侧补空格,varchar(8)如果不够报错或就变成了那几位的数据类型
比如:存“abcd”,char(8)是“abcd ”,varchar(8)就是“abcd”
*只要用到了字符,就要考虑编码问题,gb2312国标国内通用,utf-8国际通用标准(推荐使用)
*bit(8)存八个位,两种状态如车辆的进出,可以用bit的0和1来表示;多种状态也行,但是设计上比较复杂,000,001,010,011,100,101,110,可以控制多种状态。
约束
- 主键primary key
- 非空not null
- 惟一unique
- 默认default
- 外键foreign key
主键,决定了一种物理上的方式,唯一标识
非空,not null
唯一约束,这个值是不能重复的,重复则报错
设置默认值,如男女
外键约束
*一个实体对应一个“表”,一个属性对应一个“字段”
*一旦创建了表,最好不要删除或者新增栏位(改变表的结构工作量太大)
*如果删除一个字段,连同id一起删除,新增字段就新增了一个id
逻辑删除
- 对于重要数据,并不希望物理删除,一旦删除,数据无法找回
- 一般对于重要数据,会设置一个isDelete的列,类型为bit,表示逻辑删除
- 大于大量增长的非重要数据,可以进行物理删除
*数据的重要性,要根据实际开发决定