一、数据库简介
历史和来源 :
1.人类在进化的过程中,创造了数字、文字、符号等来进行数据的记录,
但是承受着认知能力和创造能力的提升,数据量越来越大,对于数据的记录
和准确查找,成为了一个重大难题
2.计算机诞生后,数据开始在计算机中存储并计算,并设计出了数据库系统
作用(数据库系统解决的问题):
1.【持久化存储】(一块硬盘,具体 在哪需要研究)
2.【优化读写】(不是和硬盘进行简单的 I/O 操作,而是优化了的 ,
每个数据库的不同点在于读写处理不同,算法不同,导致读写速度不同)
3.【保证数据的有效性】(比如以前录身份证号需要纯手工 录入,可能在翻看不同省
份信息时出现冲突,把已经存在的数据再次录入,使用数据库就可以直接查询,避免冲突)
现状 :
当前使用的数据库,主要分为两类
1.文档型,如sqlite,就是一个文件,【通过对文件的复制】【完成数据库的复制】
(用于移动端,比如电视、智能家电等 ,嵌入式用得多。)
2.服务型,如mysql、postgre,数据【存储在一个物理文件中】,但是
【需要使用终端以tcp/ip协议连接】,【进行数据库的读写操作】
(在一台机器上安装服务端(耗电量与占有的内存会 比较大),然后进行配置,
在需要访问数据库的机器上安装客户端,通过这个客户端去访问服务端,
客户端发送命令,服务端接收并执行命令,最终产生结果。)
二、 E-R模型
- E 表示entry,实体(比如一个人的身高、体重等属性)
- R 表示relationship,关系(一个人与其他人的关系,
比如你百度奥巴马,会给你个奥巴马老婆的链接,
这个关系即不是描述奥巴马属性的数据,
也不是描述奥巴马老婆属性的数据,而是描述他们之间的关系的数据,
是属于两个实体之间的数据)
- 【一个实体】转换为数据库中的【一个表】
- 【关系】描述【两个实体之间的对应规则】,包括
-
- 一对一 (一个孩子只有一个爹)
- 一对多(一个爹可以有多个孩子)
- 多对多(你有多个兄弟姐妹,相对的你的兄弟姐妹也有多个兄弟姐妹)
- 关系转换为数据库表中的一个列 *在关系型数据库中一行就是一个对象
总结 :
当你需要去设计数据库的时候,就要先去设计 E-R 模型,先设计 N 个实体,
再设计N个实体之间的关系(设计这个关系比较难,需要根据产品的设计具体实现)。
三、 三范式(三个规范)
经过研究和对使用中问题的总结,对于设计数据库提出了一些规范,这些规范被称为范式
-
- 第一范式(1NF):列不可拆分(比如我设计了学生表,里面有个属性 “姓名” ,虽然 姓 和 名 是两个信息,但是对于学生信息来说,放到一起就行了。所以 在这里不能拆)
- 第二范式(2NF):唯一标识(每张表 都要有一个属性
用于区分其他条记录,找到对应的 这条记录,比如 id,
这个标识只要有一个就行了 )
-
- 第三范式(3NF):引用主键(涉及到 “关系”,我们 在【引用关系】的时候,只能
【通过表里面的】 【主键】 【进行引用】)
说明:后一个范式,都是在前一个范式的基础上建立的
四、数据完整性
在表中为了更加准确的存储数据,保证数据的正确有效,可以在创建表的时候,
为表添加一些强制性的验证,包括数据字段的类型、约束
五、 字段类型
- 在mysql中包含的数据类型很多,这里主要列出来常用的几种
- 数字:int(整数),decimal(小数,两个参数:总共多少为 ,小数 多少位)
decimal(5, 2) 这个字段表示总共可以有 5 位, 其中 小数可以有两位
1.2 可以存进去。 1000.21 不存进去
- 字符串:char,varchar,text(text存储大文本,无限长度)
- 日期:datetime(即包含日期又包含时间)
- 布尔:bit(可以存性别、状态等,开销小,可以 根据需要去使用更多的位)
六、 约束
- 主键primary key (不能重复 、唯一标识,根据主键找数据速度非常快)
- 非空not null (如果没有该数据就会报错)
- 惟一unique(这个值不能重复,重复就报错,
一张表可以有多个唯一unique,但是只能有一个主键)
- 默认default(如果不写就采用默认值)
- 外键foreign key