数据库设计
数据库设计的作用: 随着项目规模变大,设计变得越来越重要。
良好的数据库设计:能接受数据的存储空间、能够保证数据的完整性、方便进行数据应用系统的开发;
**糟糕的数据库设计:**会产生数据冗余、存储空间浪费、内存空间浪费、数据更新和插入的异常。
数据库设计的步骤(生命周期):
1.需求分析:分析客户需求
2.概要设计:设计E-R模型图,确认需求完整
3.详细设计:利用三大范式进行完善,规范
4.代码编写:构建真实的数据库,添加测试数据
5.软件测试:测试数据库是否能满足真实的场景需求
6.安装部署:试运行阶段。
7.生产环境使用
1.需求:设计一个酒店管理系统,能够实现旅客入住手续和客房管理
1.1 收集信息 与有关人员进行沟通、座谈、详细了解相应的需求
1.2 标识实体 存储各类信息
旅客信息、客房信息
1.3 实体属性
旅客:编号、姓名、性别、身份证、手机号、入住时间、退房时间、押金、消费总金额、入住客房
客房:编号、客房号、客房类型、客房床位费、客房入住人数、客房状态
1.4 标识实体关系
旅客入住客房
2.掌握绘制数据库的E-R图
E-R图
概要设计 E-R图绘制
2.1 实体间关系的分类
一对多 多对一
客房和客人属于一对多
多对多
学生和课程 商品和订单
对 多对多 进行 拆分为 两个 一对多
中间表:
学生信息 课程信息
1 1
1 2
2 3
一对一(很少用)因为这种关系完全可以放在一张表中
身份证号码唯一属于一个公民
详细设计:先进行规范化,然后在进行模型图绘制。
3.掌握绘制数据库的模型图
二维模型图 visio 或者 powerDesigner
4.掌握数据库设计的三大范式
1.确保每列的原子性(不可分割) 即每一张表中每个字段存储的信息必须足够单一
2.一张表只能表示/描述一件事 如果在一张表中描述过多的事情 会导致数据冗余和不完整
3.表的字段之间不允许出现传递依赖。
A -> B -> C A和C就是传递依赖
可以到时候将传递依赖的信息抽取到多张表或者一张数据字典表
数据字典表:
类型:大床房、双人间、单人间、豪华双人间…
客房状态:已预订、已入住、空闲。
酒店设施:有早餐、有无空调、有无外窗、有无wifi、有无停车位
规范化和实际性能/复杂度等方面的关系
为了降低查询复杂度和提升性能:
1.允许一定的冗余列。
2.允许一些特别的计算列。
根据实际情况和需求决定规范和功能的取舍
5.掌握用户管理和用户授权
**创建用户 ** %表示任意机器 localhost 表示 本机
CREATE USER 用户名@localhost IDENTIFIED BY '用户密码';
给用户授权(可以只是授权,也可以授权的同时创建对应的用户)
GRANT SESECT ON 数据库名.数据库表名 TO '用户名'@'localhost';
授权时创建用户(ALL 表示 所有权限)(*表示所有)
GRANT ALL ON 数据库名.* TO 用户名@localhost IDENTIFIED BY '密码'
删除用户 可以同时删除多个用户 以,隔开
DROP USER 用户名@localhost;
修改用户密码
1.找到mysql的user表 然后修改对应的用户密码(root用户才能修改 修改自己或者普通用户)
use mysql;
update user set password = password('密码')where user = xx and host = xx;
2.普通用户和root都可以使用
SET PASSWORD = PASSWORD('密码');
root才能改其它的
SET PASSWORD FOR 用户名@主机地址 = PASSWORD('密码');
3.利用DOS程序mysqladmin
mysqladmin -u用户名 -p旧密码 password'新密码';
4.当丢失密码如何找回?root
在mysql的配置文件 my.ini 添加一行sip-grant-table
这样的话登陆root不在需要密码,进去之后在按照上方规则可以修改密码
记得用完之后再将选项删除