MySql-权限、备份、规范设计、三大范式

权限管理

-- 创建新用户
create user sinanshao identified by '123456';

-- 修改密码
alter user 'sinanshao'@'%' identified by '111111';

-- 改用户名
rename sinanshao to sinanshao2;

-- 删除用户
drop user sinanshao;

-- 用户授权,给该用户所有的权限
-- all privileges除了授权权限的所有权限
grant all privileges on *.* to sinanshao;

show grants for sinanshao;			-- 查看权限
show grants for root@localhost;

-- 删除权限
revoke all privileges on *.* from sinanshao;

MySql备份

为什么要备份

  • 保证重要数据不丢失
  • 方便数据转移

MySql备份方式

  • 直接拷贝物理文件
  • 使用可视化工具
  • 使用命令行(不是登录mysql)
mysqldump -hlocalhost -uroot -p123.com learning student > d:\a.sql			//dump一张表
mysqldump -hlocalhost -uroot -p123.com learning student student2 > d:\b.sql	//dump多张表
mysqldump -hlocalhost -uroot -p123.com learning > d:\b.sql					//dump数据库

source d:\a.sql								//登录mysql时导入
mysql -uroot -p123.com learning < b.sql		//不登陆mysql时导入

规范数据库设计

为什么需要数据库设计

糟糕的数据库设计 :

  • 数据冗余,存储空间浪费
  • 数据更新和插入的异常
  • 程序性能差

良好的数据库设计 :

  • 节省数据的存储空间
  • 能够保证数据的完整性
  • 方便进行数据库应用系统的开发

设计数据库步骤

  • 收集信息,与该系统有关人员进行交流 , 座谈 , 充分了解用户需求 , 理解数据库需要完成的任务.

  • 标识实体,标识数据库要管理的关键对象或实体,实体一般是名词

  • 标识每个实体需要存储的详细信息[Attribute]

  • 标识实体之间的关系[Relationship]

个人博客数据库的设计测试

  1. 收集信息,分析需求
    • 用户表
    • 文章分类表
    • 文章表
    • 评论表
    • 友情链接表
    • 自定义表(一些不能单独成表的信息)key :value
-- 用户表
create table user(
    id int(10) primary key comment '账户',
    name varchar(50) comment '昵称',
    password varchar(50) comment '密码',
    sex varchar(2) comment '性别',
    age int(3) comment'年龄',
    sign varchar(200) comment '个性签名',
    head_portrait varchar(100) comment '头像的链接'
);

-- 文章分类表
create table category(
    id int(10) primary key comment '分类编号',
    name varchar(10) comment '类型名称'
);

-- 文章表
create table article(
    id int(10) primary key comment '文章编号',
    name varchar(20) comment '文章题目',
    category_id int(10) comment '文章所属类别id',
    author_id int(10) comment '文章创建者id',
    content text comment '文章内容',
    create_time datetime comment '创建时间',
    update_time datetime comment '最后一次修改时间'
);

-- 评论表
create table comment(
    id int(20) comment '评论的id',
    blog_id int(10) comment '所属文章的id',
    created_by_user_id int(10) comment '评论发布用户的id',
    content varchar(200) comment '评论内容',
    father_id int(10) comment '父评论', -- 就是盖楼了,需要自连接来查询
    create_time datetime comment '创建时间'
);

-- 链接表
create table link(
    id int(10) comment '链接编号',
    string_link varchar(200) comment '链接地址'
);
  1. 标识实体(落实到每个字段,上面已经实现)
  2. 标识实体之间的关系
    • user --> blog
    • blog --> category
    • user --> user

数据库的三大范式

为什么需要数据规范化?

不合规范的表设计会导致的问题:

  • 信息重复
  • 更新异常
  • 插入异常
    • 无法正确表示信息
  • 删除异常
    • 丢失有效信息

第一范式(1NF)

原子性(非事务中的原子性):保证每一列不可再分

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0xXQeZII-1633436192268)(C:\Users\86159\AppData\Roaming\Typora\typora-user-images\image-20211005102916814.png)]

在此表中,家庭信息和学校信息这两列可继续再分,不满足原子性,调整如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WtNF8XoP-1633436192270)(C:\Users\86159\AppData\Roaming\Typora\typora-user-images\image-20211005103447883.png)]

第二范式(2NF)

前提:满足第一范式

完全依赖(非部分依赖):每一张表只描述一件事情,也就是表中的每一列都要与主键相关(非联合主键的话一眼就可以看出来),而不能只与主键(针对联合主键)的某一部分相关

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nl4lsEon-1633436192271)(C:\Users\86159\AppData\Roaming\Typora\typora-user-images\image-20211005105810545.png)]

该表订单号和产品号组成联合主键,而订单时间和订单金额只与订单号相关,而与产品号无关,不满足完全依赖,调整如下,拆分为两张表:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HkFYq4oW-1633436192273)(C:\Users\86159\AppData\Roaming\Typora\typora-user-images\image-20211005110032670.png)]

第三范式(3NF)

前提:满足第一和第二范式

直接相关(非间接相关):表中的每一列数据都与主键直接相关,而不能间接相关

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vK3Tiql2-1633436192274)(C:\Users\86159\AppData\Roaming\Typora\typora-user-images\image-20211005110453557.png)]

该表的班主任的性别和年龄与学生没有直接相关,调整如下,拆分为两张表:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oKn8FZhd-1633436192275)(C:\Users\86159\AppData\Roaming\Typora\typora-user-images\image-20211005114520477.png)]

规范性和性能问题

关联查询的表不得超过三张(阿里规范)

  • 为满足某种商业目标 , 数据库性能比规范化数据库更重要

  • 在数据规范化的同时 , 要综合考虑数据库的性能

  • 故意给某些表添加冗余字段。(从多表查询变为单表查询)

  • 故意增加一些计算列方便查询

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值