1.了解设计数据库的步骤
数据库设计的作用
随着项目规模变大,设计变得越来越重要!
良好的数据库设计能节省数据的存储空间,能够保证数据的完整性
方便进行数据库应用系统的开发;
糟糕的数据库设计会产生数据冗余,存储空间浪费,内存空间浪费
数据更新和插入的异常。
数据库设计的步骤(生命周期)
1.需求分析 明确甲方意图
2.概要设计 E-R图 保证需求完整
3.详细设计 利用三大范式进行完善 规范化
4.代码编写 构建真实的数据库 添加测试数据
5.软件测试 测试数据库是否满足真实的场景需求
6.安装部署 试运行阶段
7.生成环境使用
小步快跑,快速迭代(更新)
敏捷开发 DevOps
需求:设计一个酒店管理系统,能够实现旅客入住手续和客房管理
1.需求分析
1.1 收集信息 与有关人员进行沟通,座谈,详细了解相应的需求。
1.2 标识实体 存储各类信息
旅客信息,客房信息
1.3 标识实体属性
旅客:姓名 性别 身份证号 手机号 入住时间 退房时间 押金 消费总金额 入住客房
客房:编号 客房号 客房类型 客房床位数 客房入住人数 客房状态
1.4 标识实体关系
旅客入住客房(实体关系分类)
2.概要设计 E-R 图绘制
实体间关系的分类
一对多 多对一
客房和客人属于一对多
多对多
学生和课程 商品和订单
对多对多进行拆分为两个一对多
学生 和课程属于多对多 但是往往除了学生表和课程表之外会创建中间表
中间表:
学生信息 课程信息
1 1
1 2
2 3
一对一 因为这种关系完全可以放在一张表中
身份证号是唯一 属于一个公民
详细设计 先进行规范化 然后再进行模型图绘制
2.掌握绘制数据库的E-R图
3.掌握绘制数据库的模型图
二维模型图 visio 或者 PowerDesigner
4.掌握数据库设计的三大范式
1.确保每列的原子性(不可分隔) 即一张表中每个字段存储的信息必须足够单一
2.一张表只能表示一件事
3.表的字段之间不允许出现传递依赖
A->B->C A C就是传递依赖
可以到时候将传递依赖的信息抽取到多张或者一张数据字典表
数据字典表
类型:大床房 双人间 单人间 豪华双人间
客房状态:已预订 已入住 空闲
酒店设施:有早餐 有无空调 有无外窗 有无wifi 有无停车位
规范化和实际性能/复杂度等方面的关系
为了降低查询复杂度和提升性能
1.允许一定的冗余列
2.允许一些特别的计算列
根据实际情况和需求决定规范和性能的取舍
创建用户
CREATE USER shihaoran
@localhost
IDENTIFIED BY chenxu521
;
给用户授权(可以只是授权 也可以授权的同时创建对应的用户)
GRANT SELECT ON myschool.student TO shihaoran@localhost;
授权时创建用户(ALL表示所有权限)
GRANT ALL ON myschool.*TO CHENXU@LOCALHOST IDENTIFIED BY shr521
;
删除用户 可以同时删除多个用户 以,隔开
DROP USER chenxu@localhost;
修改用户密码
1,找到mysql的user表 然后修改对应的用户密码
use mysql;
update user set password = password(密码
) where user = xx and host =xxx;
2.普通用户和root都可以使用
SET PASSWORD = PASSWORD(密码
);
root才能该其它的
SET PASSWORD FOR 用户名@主机地址 = PASSWORD(密码
);
3.利用DOS程序mysqladmin
mysqladmin -u用户名 -p密码 password `新密码·;
4.当丢失了密码如何找回?root
在mysqld 配置文件my.ini添加一行skip-grant-table
这样的话登录root不需要输入密码 进去之后按上方的规则可以修改密码
记得用完之后再将选项删除。
ATM取款机
1.创建数据库 用户并授权
CREATE DATABASE bankdb;
use bankdb;
GRANT ALL ON bankdb.*TO bankmaster
@%
IDENTIFIED BY 1234
;
2,省略建表和添加数据
3.模拟常规业务(这些业务 未来实现业务逻辑之后 最终的数据操作代码就是以下的SQL )
3.1修改客户密码
UPDATE cardinfo SET password
= 123456
WHERE cardID = 1010357771212
;
3.2办理银行卡挂失 0 正常 1挂失
UPDATE cardinfo SET ISREPortLoss = 1 WHERE cardID = 10101-357612121134
;
3.3统计银行总存入金额和总支取金额
SELECT
tradeType,SUM(tradeMoney)
FROM
tradeinfo
GROUP BY tradeType;
3.4查询本周开户信息
select
cardID
FROM
cardID
WHERE
WEEKOFYEAR(NOW()) = WEEKOFYEAR(openDate);
3.5查询本月交易金额最高的卡号
SELECT
cardID,MAX(tradeMoney)
FROM
tradeinfo;
3.6查询挂失客户
SELECT
cardID
FROM
cardinfo
WHERE
ISReportLoss = 1;
3.7催款提醒业务(如果金额不足5元提醒)
SELECT
cardID
FROM
cardinfo
WHERE
balance < 5;
5.掌握DCL的授权等语句