2019/04/04 关系型数据库规范

在这里插入图片描述
表和表之间的关系,有可能
一对一
一对多(一个员工在一个部门里,一个部门有多个员工)
多对多(学员信息,学员报名多个课程,课程会有多个学员学习)
emp员工表,department 部门表

利用外键把一对多的关系表现出来了
在这里插入图片描述
主键是确保每个表里记录都是唯一的,主键和外键结合起来 就形成了一对多的关系
在这里插入图片描述
所以员工表里不能写个10,因为部门id没有10.只有1,2,3,4,叫外键约束
在这里插入图片描述
在这里插入图片描述
学员信息,课程信息,如果两边都写课程,就有可能学生在填信息的录入错误
在这里插入图片描述
所以可以这么设计,保证这两个表是多对多的关系
学员信息表,不写课程名字

在这里插入图片描述
这样的结果就是不会重复存放,极大的节约存储空间
带来的缺点就是,逻辑性比较复杂
因为你要查a同学报的课程名字是什么,就涉及到多表关联

在这里插入图片描述
数据的结构,数据的操作,数据的约束,统称三要素
在这里插入图片描述
完整性,一部分也可以依靠主键,唯一键uk,unique
但是在一张表中,主键只有一个,主键是唯一的,而外键可以有好几个
唯一键和主键还有点区别,就是允许为空
主键不允许为空

在这里插入图片描述
域的完整性,就是限制字段的完整性,比如字段的值范围
在这里插入图片描述
就是外键,两个表两个字段之间的关联
在这里插入图片描述
规划一个数据库
规范数据库就是尽量让你的数据库在保存的时候,不要存重复的数据,比较节约我们的磁盘空间

在这里插入图片描述
规范的模式叫范式,数据库里要让你的数据更加规范通过一些范式来实现,所谓范式就是一些规则,只要符合范式,那你的数据库存放数据就更加规范,而且数据库的冗余数据就更加少,而且这些范式是递归规范的
范式越高越严格,数据库冗余度越小,目前主流的有很多范式
如果规范的多,那就使用起来也就不怎么灵活,逻辑性就比较复杂
主流的范式,只要遵守三大范式就可以了
1NF
2NF
3NF

在这里插入图片描述
如果设计表,把考试成绩分列,就违反了第1范式,因为第1范式,不能有重复的列,
或者这个字段存里好几个值也是违反了第一范式

在这里插入图片描述
那么如何满足第一范式
在这里插入图片描述
一般第一范式必须要遵守,不然就不叫关系型数据库了
面试很少让你实际操作,面试只要自信,能说出来,会表达很重要
在这里插入图片描述
如果属性不完全依赖于主键,就违反了第二范式了,
假设有个字段存放员工姓名,性别,城市,城市区号
城市和城市区号并不完全依赖于姓名,就违反了第二范式

在这里插入图片描述
解决办法,城市的区号是依赖于城市的,就需要单独设计一张表
在这里插入图片描述
发现问题,姓名在一个比较大的公司的话是可能重复的,在上面设置主键是不好的
在各个市区的员工没有重名的,全放在一起就有重名的了,
就可以用复合主键,把姓名和城市拿出来作为一个主键

在这里插入图片描述
设置成复合主键,下图的表就违反了第三范式
在这里插入图片描述
设置成一个员工id,就违反了第三范式
在这里插入图片描述
城市名称和城市编号,产生了依赖关系,就违反了第三范式,解决放啊就是把城市另外建一张表,这样用编号代替文字就节省了很多空间
在这里插入图片描述
但是你这样就增加了查询难度,所以有时候就需要违反第三范式,不跨表查询,在逻辑上简单,速度上也变快了,有时候追求高性能就是违反范式的
带来查询上的困难,甚至影响性能

在这里插入图片描述
在这里插入图片描述
sql国际上用来管理数据库的标准语言
oracle首先用于商业
sql结构化查询语言只关注,我要得到的数据是什么,而不关心数据是怎么在磁盘上存放的,这一点大大减少了,数据库使用用户的难度
走网络,就是tcp/ip协议,就需要用到增加的独立端口号
ip加地址组合成了一个套接字,套接字里里面就用到了每个数据库用到的各自独立的端口号,mysql tcp的3306端口。
sqlserver1433 oracle1521,是标准端口,生产中可以根据企业的需求修改

在这里插入图片描述
客户端安装后,可以直接去操作数据库了,有字符界面,有图形界面
mysql主流是命令行
普通用户一般用应用程序方案,安装客户端也不会使用
就需要程序链接数据库,就需要开发接口

在这里插入图片描述
JDBC,java开发,ODBC微软,各种语言区编程序都需要按照编程接口
按开发接口去编写程序就可以 了

在这里插入图片描述
在这里插入图片描述
索引很关键,等于把数据库的数据建立一个目录,类似于书的目录,如果没有目录,需要从头开始翻,全表扫描
如果有目录就快很多
所以也是一个数据,只不过记录的是一个特定记录的数据,把它放在专门的空间中,按照一定次序排序,显而易见说的目录是按照章节的次序排序
利用书的目录可以提高速度,但是也有代价,表的索引也是占空间的,但是下载往往追求性能,因为现在硬盘便宜了,既然方便查询,那么会不会对表产生修改
如果你的数据库读的多,写的少,那么索引对于性能还是提升不少,(但是有些数据库就是读的少,写的多)
如果平凡的改,索引加不加就需要考虑了,因为会带来额外的一些负担

在这里插入图片描述
选择是挑选行
投影就是选择列(100列中选择显示几列)
连接,表和表之间的关联,外链
,外链RDBMS是关系型数据库在磁盘上保存数据,每个格式都不一样,mysql就和oracle都不一样,即使是mysql,不同的存储引擎存储在磁盘上的文件也不同,即使是同一种存储引擎,存放在磁盘上的也有可能不一样,比如拆开成多个文件和一个文件,这和你的配置有关,这就叫物理层
物理层对于运维来讲,需要关心,我们关心这些数据放在了哪里,比如我们要把不同类型的文件在磁盘上分门别类,而且需要考虑到哪些文件负载比较大,性能要求高,就可以把这个文件放在一个告诉硬盘上,来提高性能
数据库和数据库日志是分开放的,系统默认往往是放一块的

在这里插入图片描述
逻辑层,数据在存储的时候,是存储哪些类型的数据,和数据存在的关联。逻辑性的数据存储,主键外键之类的
在这里插入图片描述
用户看到的,是别人希望你看到的,比希望你看到的就看不到,比如买东西的买家,进货价格
在这里插入图片描述
XML扩展的标记语言,有些数据就是存放再xml里的,比如yum仓库的元数据
tomcat中间件配置文件格式就是xml

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
禁止用户列表。false,等于不禁止用户列表s’s
修改一项,登录默认登录,无须输入用户名密码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
转成init5 图形界面,出现的这个列表就是用户列表
在这里插入图片描述在这里插入图片描述
把这项变成true,就可以不让人看到用户列表,从而不知道你这台电脑又多少用户,提高安全性
在这里插入图片描述
切换一下,就不显示列表了
在这里插入图片描述
在这里插入图片描述
JSONE数据格式,也是很多人用来存放配置的一种格式,用起来更方便
在这里插入图片描述阿里提出了去IOE,ibm,oracle,emc存储,商业公司的产品好是好就是太贵了
阿里的公司都不用oracle,学学mysql更有前途
2000几年,mysql还没开始流行起来,很多人公司就用sqlserver,java

大众点评是.net开发,也是后面迁移到的Linux
oracle被mysql收购以后,升级更新不是那么勤快了

在这里插入图片描述
所以centos7为什么默认现在就是用mariadb(marira是monty小女儿名字)而不是MySQL了
在这里插入图片描述
企业版,需要花钱的
在这里插入图片描述
普通社区版本,GPL约定开源的,公共许可证
在这里插入图片描述
在这里插入图片描述
bundle集成版,好多软件集成在里面,功能比较丰富
在这里插入图片描述
tar打包的就是源码,可以编译安装
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述都在支持mariadb

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值