数据库-数据库设计三范式;DBA常用命令

本文详细介绍了MySQL数据库的常用命令,包括创建用户、授权、回收权限、修改密码等操作。同时,深入讲解了数据库设计的三个范式:第一范式确保字段原子性,第二范式消除部分依赖,第三范式避免传递依赖。通过实例解析了如何在实践中应用这些范式以优化数据库结构,减少冗余和提高效率。
摘要由CSDN通过智能技术生成

一、DBA常用命令

1、新建用户

CREATE USER username IDENTIFIED BY 'password';

username:新建的用户名

password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器

create user admin11 identified by '123456';

2、授权

grant all privileges on dbname.tbname to 'username'@'login ip' identified by 'password' with grant option;

dbname:表示所有数据库

tbname:表示所有表

login ip:表示任何 ip

password 为空,表示不需要密码即可登录

with grant option; 表示该用户还可以授权给其他

3、回收权限

revoke privileges on dbname[.tbname] from username;

revoke all privileges on *.* from admin11;

4、修改数据库密码

update user set password = password('admin123') where user = 'admin11';
5、 刷新权限
flush privileges;

6、导出数据库(使用mysqldump命令)

在windows的dos命令窗口中

mysqldump 数据库名>D:\xx.sql -uroot -p123456
7、导出数据库表(使用mysqldump命令)
mysqldump 数据库名 表名>D:\xx.sql -uroot -p123456

8、导入数据库

(1)先登录到mysql数据库服务器上

(2)创建数据库:create database 数据库名

(3)使用数据库:use 数据库名

(4)初始化数据库:source D:\xx.sql

二、数据库设计三范式

数据库进行表设计时,需要遵循一定的规则,这种规则就是范式。范式能够帮助我们建立冗余较小、结构合理的数据库

数据库设计范式有3个

第一范式:要求任何一张表必须有主键,每一个字段原子性不可再分(最核心,最重要的范式)

第二范式:建立在第一范式的基础之上,要求所有非主键字段完全依赖主键,不要产生部分依赖。

第三范式:建立在第二范式的基础之上,要求所有非主键字段直接依赖主键,不要产生传递依赖。

设计数据库表的时候,按照以上的范式进行,可以避免表中数据的冗余,空间的浪费

1、第一范式

必须有主键,并且每一个字段都是原子性不可再分

如下表

    学生编号     学生姓名                 联系方式
	----------------------------------------------------
	1001		  张三		    zs@gmail.com,13212342345
	1002		  李四		    ls@sina.com,13623456565
	1003		  王五		    ww@163.com,15878909807

不满足第一范式

(1)没有主键;(2)联系方式可以分为邮箱地址和电话

    学生编号(PK)  学生姓名       邮箱地址            电话
	------------------------------------------------------
	1001		   张三	     zs@gmail.com      13212342345
	1002		   李四	     ls@sina.com       13623456565
	1003		   王五	     ww@163.com        15878909807

2、第二范式

建立在第一范式的基础之上,要求所有非主键字段必须完全依赖主键,不要产生部分依赖

如下表

    学生编号    学生姓名  教师编号     教师姓名
	------------------------------------------
	1001		张三	  001		 王老师
	1002		李四	  002		 赵老师
	1003		王五	  001		 王老师
	1001		张三	  002		 赵老师

这张表描述了学生和老师的关系:(1个学生可能有多个老师,1个老师有多个学生)

多对多关系!!!

即使修改(学生编号+教师编号)为复合主键,

但依然不满足第二范式,“张三”依赖1001,“王老师”依赖001,显然产生了部分依赖

部分依赖导致数据冗余,空间浪费;“张三”和“王老师”都重复了

因此需要三张表来满足多对多关系

学生表
		学生编号(pk)		学生名字
		-----------------------
		1001			  张三
		1002			  李四
		1003			  王五
		

教师表
		教师编号(pk)		教师姓名
		------------------------
		001				 王老师
		002				 赵老师


学生教师关系表
		id(pk)		学生编号(fk)		教师编号(fk)
		----------------------------------------
		1			 1001			   001
		2			 1002			   002
		3			 1003			   001
		4			 1001			   002

多对多,三张表,其中一个关系表含两个外键 

3、第三范式

第三范式建立在第二范式的基础之上,要求所有非主键字典必须直接依赖主键,不要产生传递依赖

如下表

学生编号(PK) 学生姓名  班级编号    班级名称
------------------------------------------
 1001		  张三		 01		  一年一班
 1002		  李四		 02		  一年二班
 1003		  王五		 03		  一年三班
 1004		  赵六		 03		  一年三班

 这张表描述了学生和班级的关系:(1个班级可能有多个学生)

一对多关系!!!

以上表不满足第三范式

一年一班依赖01,01依赖1001,产生了传递依赖;产生了数据的冗余

班级表:
		班级编号(pk)		班级名称
		------------------------
		01				一年一班
		02				一年二班
		03				一年三班


学生表:多
		学生编号(PK) 学生姓名  班级编号(fk)
		---------------------------------
		1001		   张三		  01			
		1002		   李四		  02			
		1003		   王五		  03			
		1004		   赵六		  03

一对多,两张表,其中多的表加外键

一对一关系表(如:在实际的开发中,可能存在一张表字段太多,太庞大;这时要拆分表)

user表
	id	login_name	 login_pwd	 real_name	      email	        address........
	---------------------------------------------------------------------------
	1	 zhangsan		123			张三		zs@163.com
	2	 lisi			123			李四		ls@sina.com

字段太多,需要拆分为两张表

login 登录表
	    id(pk)	login_name	login_pwd	
		------------------------------
		1		zhangsan	  123			
		2		lisi		  123			


user 用户表
        id(pk)	login_id(fk+unique) real_name	  email	     address......	
		--------------------------------------------------------------------
		100			1                  张三		zs@163.com								
		200			2                  李四		ls@sina.com

数据库设计三范式是理论上的,实践和理论有的时候有偏差。最终目的是为了满足客户的需求,有的时候会拿冗余换执行速度(在sql当中,表和表之间连接次数越多,效率越低(笛卡尔积))有的时候可能会存在冗余,但是减少了表的连接次数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值