From 320f2efe2207c7f4a9bb7065f639e9c0b73adf0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A9=B9=E6=BA=90=E9=93=A0?= <1905540517@qq.com> Date: Mon, 5 Sep 2022 02:40:35 +0000 Subject: [PATCH 1/3] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=209.1?= =?UTF-8?q?=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../9.1\344\275\234\344\270\232.md" | 139 ------------------ 1 file changed, 139 deletions(-) delete mode 100644 "9.1\344\275\234\344\270\232/9.1\344\275\234\344\270\232.md" diff --git "a/9.1\344\275\234\344\270\232/9.1\344\275\234\344\270\232.md" "b/9.1\344\275\234\344\270\232/9.1\344\275\234\344\270\232.md" deleted file mode 100644 index 93a545a..0000000 --- "a/9.1\344\275\234\344\270\232/9.1\344\275\234\344\270\232.md" +++ /dev/null @@ -1,139 +0,0 @@ -```` -```sql -create database Rabobank -go -use Rabobank -go -create table [user](--账号信息表 - useNO int primary key identity(1,1),--用户id - useName nvarchar(20) ,--用户姓名 - usephone char(11) unique,--手机号 - usepcard int check(usepcard<=3),--拥有卡的数量 - useAge int check(useAge between 18 and 100),--用户年龄 - useSex varchar(10) check(useSex in ('男','女'))--用户性别 -) -go - -create table bankcard--银行卡表 -( - banCardNO char(16) primary key ,--银行卡号 - remaining decimal(12,2),--余额 - banpass varchar(30) check(len(banpass)>=8),--密码 - useNO int references [user](useNO)--用户id -) -go - -create table Transinfo(--交易信息表 - traNO int primary key identity(1,1),--交易id - traTime date ,--交易时间 - trastype varchar(20) check(trastype in ('存钱','取钱')), --交易类型 - trasmoney decimal(12,2),--交易金额 - banNO char(16) references bankcard(banCardNO)--交易卡号 -) -go - -create table [transfer](--转账表 - tranNO int primary key identity(1,1),--交易id - tranTime date ,--交易时间 - transmoney decimal(12,2),--交易金额 - banNO char(16) references bankcard(banCardNO),--交易卡号 - trancaed char(16),--接收账号 -) -go - -create table Ttype(--银行卡状态表 - Tno int primary key identity(1,1),--状态id - banNO char(16) references bankcard(banCardNO),--卡号 - tType varchar(20) check(tType in('正常','挂失','冻结','注销')) -) - -insert [user] values -('张三',17828902422,1,20,'女'), -('李四',18528944562,1,18,'男'), -('王五',15856212433,1,19,'男') -go - -insert bankcard values -(5896549536512458,200,12345678,1), -(3659854652135654,25000,12345678,2), -(2365984512369411,10000,12345678,3) -go - -create trigger tr1_Transinfo -on Transinfo -for insert -as - declare @banNO char(16) --交易卡号 - declare @trastype char(16)--交易类型 - declare @smoney decimal(12,2)--金额 - declare @smoneyh decimal(12,2)--更新后的金额 - select @banNO=banNO,@trastype=trastype,@smoney=trasmoney from Transinfo - if(@trastype='取钱') - begin - update bankcard set @smoneyh=remaining-@smoney where banCardNO=@banNO - if(@smoneyh>0) - begin - update bankcard set remaining=remaining-@smoney where banCardNO=@banNO - end - else - begin - print'交易失败' - rollback transaction - end - - end - else - begin - update bankcard set remaining=remaining+@smoney where banCardNO=@banNO - end -go - -create trigger tr2_transfer -on [transfer] -for insert -as - declare @banNO char(16) --交易卡号 - declare @smoney decimal(12,2)--金额 - declare @smoneyh decimal(12,2)--更新后的金额 - declare @trancaed char(16)--接收卡号 - select @banNO=banNO,@smoney=transmoney,@trancaed=trancaed from [transfer] - update bankcard set @smoneyh=remaining-@smoney where banCardNO=@banNO - - if(@smoneyh>0) - begin - update bankcard set remaining=remaining-@smoney where banCardNO=@banNO - - update bankcard set remaining=remaining+@smoney where banCardNO=@trancaed - end - else - begin - print'交易失败' - rollback transaction - end -go - -insert Transinfo values -(GETDATE(),'取钱',50,5896549536512458), -(GETDATE(),'取钱',5000,3659854652135654), -(GETDATE(),'存钱',500,2365984512369411) -go - - -insert [transfer] values -(GETDATE(),500,2365984512369411,5896549536512458) -go - - -insert Ttype values -(2365984512369411,'正常'), -(5896549536512458,'正常'), -(3659854652135654,'正常') - -select * from [user] -select * from bankcard -select * from Transinfo -select * from [transfer] -select * from Ttype - -``` -```` \ No newline at end of file -- Gitee From 7a31fa122db1277c0851f2de0549c75be2842594 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A9=B9=E6=BA=90=E9=93=A0?= <1905540517@qq.com> Date: Mon, 5 Sep 2022 02:40:57 +0000 Subject: [PATCH 2/3] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=209.1?= =?UTF-8?q?=E7=AC=94=E8=AE=B0.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "9.1\347\254\224\350\256\260.md" | 167 ------------------------------- 1 file changed, 167 deletions(-) delete mode 100644 "9.1\347\254\224\350\256\260.md" diff --git "a/9.1\347\254\224\350\256\260.md" "b/9.1\347\254\224\350\256\260.md" deleted file mode 100644 index d0a4ef8..0000000 --- "a/9.1\347\254\224\350\256\260.md" +++ /dev/null @@ -1,167 +0,0 @@ -``` -# 一、数据库设计 - -## (一)什么是数据库设计? - -规划和结构化数据库中的数据对象及这些数据之间关系的过程 - -### 1.良好的数据库设计 - -- 节省数据的存储空间 -- 能够保证数据的完整性 -- 方便进行数据库应用系统的开发 - -### 2.糟糕的数据库设计 - -- 数据冗余、存储空间浪费 -- 内存空间浪费 -- 数据更新和插入异常 - -### 3.查看数据库关系图 - -双击目标数据库展开->数据库关系图->新建数据库关系图->添加表 - -******** - -## (二)数据库设计步骤 - -分为6个阶段: - -1. 需求分析阶段:分析客户的业务和数据处理需求 -2. 概要设计阶段:设计数据库的E-R模型图,确认需求信息的正确和完整性 -3. 详细设计阶段:应用三大范式审核数据库结构 -4. 代码编写阶段:物理实现数据库,编码实现应用 -5. 软件测试阶段 -6. 安装部署 - -***** - -### 1.需求分析 - -1. 收集信息 - - 与该系统有关人员进行交流、座谈,充分了解用户需求,理解数据库需要完成的任务 - -2. 标识实体 - - 标识数据库要管理的关键对象或实体,实体一般是名词 - -3. 标识每个实体的属性 - - 就是字段或者列 - -4. 标识实体之间的关系 - -******* - -### 2.概要设计 - -#### 2.1绘制E-R图 - -- 正方形:实体,一般是名词 -- 椭圆形:属性,一般是名词 -- 菱形:关系,一般是动词 - -******* - -#### ==2.2实体—关系== - -- **实体**:凡是可以互相区别而被人们认识的事、物、概念等统统抽象为实体 -- **属性**:实体一般具有若干特征,称之为实体的属性;属性对应表中的列 -- **关系**:实体与实体之间的关系抽象为联系 - -***** - -#### 2.3映射基数 - -- 一对一:汽车和停车位的关系(一辆车停一个车位) -- 一对多:客房和客人的关系(一个客房可以住多个客人) -- 多对一 -- 多对多:学生和教师的关系(一个教师可以教多个学生,一个学生可以听多名教师讲课) - -***** - -#### 2.4转化E-R图为数据库模型图 - -==使用Microsoft Visio 2010== - -cdm表:单纯看结构 - -![image-20220901111541826](%E4%B8%80%E3%80%81%E6%95%B0%E6%8D%AE%E5%BA%93%E8%AE%BE%E8%AE%A1.assets/image-20220901111541826.png) - -pdm表:有多对多关系需要加一个表,设置联合主键 - -![image-20220901111648963](%E4%B8%80%E3%80%81%E6%95%B0%E6%8D%AE%E5%BA%93%E8%AE%BE%E8%AE%A1.assets/image-20220901111648963.png) - -多 指向---> 一 - -- 将各实体转换为对应的表,将各属性转换为各表对应的列 -- 标识每个表的主键列. -- 在表之间建立主外键,体现实体之间的映射关系 - -******* - -## (三)数据库设计 三大范式 - -### 1.了解规范和不规范设计 - -**不规范的表设计** - ->- 信息重复 ->- 更新异常 ->- 插入异常:无法正确表示信息 ->- 删除异常:丢失有效信息 - -****** - -**规范的表设计** - -> - 尽可能少的数据冗余 -> - 没有插入异常 -> - 没有删除异常 -> - 没有更新异常 - -### 2.第一范式(1NF) - -==关系中的每个属性必须是不可再分的简单项==,不能是属性组合,即属性的取值必须是不可拆分的原子值 - -比如一个地址列,中国北京市 拆成 中国 北京 - -(根据情况而定) - -******** - -### 3.第二范式(2NF) - -==表必须符合第一范式 ,表中的每列必须依赖主键== - -就是要求每个表只描述一件事情 - -比如: - -| 学号 | 姓名 | 课程号 | 课程名称 | 成绩 | -| ---- | ---- | ------ | --------- | ---- | -| s001 | 张三 | k001 | java | 60 | -| s002 | 李四 | k001 | sqlserver | 75 | -| s001 | 张三 | k002 | java | 95 | - -因为没有合适的主键会用联合主键学号和课程号,会出现部分依赖,成绩依赖于课程,课程依赖于课程号,姓名依赖于学号 - -要消除部分依赖,即把字段拆开形成新的表:学生表 课程表 成绩表 - -**** - -### 4.第三范式(3NF) - -**确保每列都和主键列直接相关,而不是间接相关** - -定义: - -==如果一个关系满足2NF,并且除了主键外的其他列既不部份依赖也不传递依赖于主键列,则满足第三范式== - -C依赖B依赖A就叫做**传递依赖** - -******* - -==规范过程即拆分过程:把表分的非常细,一旦出现多对一就会有主外键关系,N->1== -``` \ No newline at end of file -- Gitee From be1ac195c0934e598444cfb8dc2cc72581a6da39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A9=B9=E6=BA=90=E9=93=A0?= <1905540517@qq.com> Date: Mon, 5 Sep 2022 23:54:26 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...7\232\204\350\277\207\347\250\213### 1.md" | 167 ++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 "23\350\251\271\346\272\220\351\223\240/x # \344\270\200\343\200\201\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241## (\344\270\200)\344\273\200\344\271\210\346\230\257\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241\357\274\237\350\247\204\345\210\222\345\222\214\347\273\223\346\236\204\345\214\226\346\225\260\346\215\256\345\272\223\344\270\255\347\232\204\346\225\260\346\215\256\345\257\271\350\261\241\345\217\212\350\277\231\344\272\233\346\225\260\346\215\256\344\271\213\351\227\264\345\205\263\347\263\273\347\232\204\350\277\207\347\250\213### 1.md" diff --git "a/23\350\251\271\346\272\220\351\223\240/x # \344\270\200\343\200\201\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241## (\344\270\200)\344\273\200\344\271\210\346\230\257\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241\357\274\237\350\247\204\345\210\222\345\222\214\347\273\223\346\236\204\345\214\226\346\225\260\346\215\256\345\272\223\344\270\255\347\232\204\346\225\260\346\215\256\345\257\271\350\261\241\345\217\212\350\277\231\344\272\233\346\225\260\346\215\256\344\271\213\351\227\264\345\205\263\347\263\273\347\232\204\350\277\207\347\250\213### 1.md" "b/23\350\251\271\346\272\220\351\223\240/x # \344\270\200\343\200\201\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241## (\344\270\200)\344\273\200\344\271\210\346\230\257\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241\357\274\237\350\247\204\345\210\222\345\222\214\347\273\223\346\236\204\345\214\226\346\225\260\346\215\256\345\272\223\344\270\255\347\232\204\346\225\260\346\215\256\345\257\271\350\261\241\345\217\212\350\277\231\344\272\233\346\225\260\346\215\256\344\271\213\351\227\264\345\205\263\347\263\273\347\232\204\350\277\207\347\250\213### 1.md" new file mode 100644 index 0000000..d0a4ef8 --- /dev/null +++ "b/23\350\251\271\346\272\220\351\223\240/x # \344\270\200\343\200\201\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241## (\344\270\200)\344\273\200\344\271\210\346\230\257\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241\357\274\237\350\247\204\345\210\222\345\222\214\347\273\223\346\236\204\345\214\226\346\225\260\346\215\256\345\272\223\344\270\255\347\232\204\346\225\260\346\215\256\345\257\271\350\261\241\345\217\212\350\277\231\344\272\233\346\225\260\346\215\256\344\271\213\351\227\264\345\205\263\347\263\273\347\232\204\350\277\207\347\250\213### 1.md" @@ -0,0 +1,167 @@ +``` +# 一、数据库设计 + +## (一)什么是数据库设计? + +规划和结构化数据库中的数据对象及这些数据之间关系的过程 + +### 1.良好的数据库设计 + +- 节省数据的存储空间 +- 能够保证数据的完整性 +- 方便进行数据库应用系统的开发 + +### 2.糟糕的数据库设计 + +- 数据冗余、存储空间浪费 +- 内存空间浪费 +- 数据更新和插入异常 + +### 3.查看数据库关系图 + +双击目标数据库展开->数据库关系图->新建数据库关系图->添加表 + +******** + +## (二)数据库设计步骤 + +分为6个阶段: + +1. 需求分析阶段:分析客户的业务和数据处理需求 +2. 概要设计阶段:设计数据库的E-R模型图,确认需求信息的正确和完整性 +3. 详细设计阶段:应用三大范式审核数据库结构 +4. 代码编写阶段:物理实现数据库,编码实现应用 +5. 软件测试阶段 +6. 安装部署 + +***** + +### 1.需求分析 + +1. 收集信息 + + 与该系统有关人员进行交流、座谈,充分了解用户需求,理解数据库需要完成的任务 + +2. 标识实体 + + 标识数据库要管理的关键对象或实体,实体一般是名词 + +3. 标识每个实体的属性 + + 就是字段或者列 + +4. 标识实体之间的关系 + +******* + +### 2.概要设计 + +#### 2.1绘制E-R图 + +- 正方形:实体,一般是名词 +- 椭圆形:属性,一般是名词 +- 菱形:关系,一般是动词 + +******* + +#### ==2.2实体—关系== + +- **实体**:凡是可以互相区别而被人们认识的事、物、概念等统统抽象为实体 +- **属性**:实体一般具有若干特征,称之为实体的属性;属性对应表中的列 +- **关系**:实体与实体之间的关系抽象为联系 + +***** + +#### 2.3映射基数 + +- 一对一:汽车和停车位的关系(一辆车停一个车位) +- 一对多:客房和客人的关系(一个客房可以住多个客人) +- 多对一 +- 多对多:学生和教师的关系(一个教师可以教多个学生,一个学生可以听多名教师讲课) + +***** + +#### 2.4转化E-R图为数据库模型图 + +==使用Microsoft Visio 2010== + +cdm表:单纯看结构 + +![image-20220901111541826](%E4%B8%80%E3%80%81%E6%95%B0%E6%8D%AE%E5%BA%93%E8%AE%BE%E8%AE%A1.assets/image-20220901111541826.png) + +pdm表:有多对多关系需要加一个表,设置联合主键 + +![image-20220901111648963](%E4%B8%80%E3%80%81%E6%95%B0%E6%8D%AE%E5%BA%93%E8%AE%BE%E8%AE%A1.assets/image-20220901111648963.png) + +多 指向---> 一 + +- 将各实体转换为对应的表,将各属性转换为各表对应的列 +- 标识每个表的主键列. +- 在表之间建立主外键,体现实体之间的映射关系 + +******* + +## (三)数据库设计 三大范式 + +### 1.了解规范和不规范设计 + +**不规范的表设计** + +>- 信息重复 +>- 更新异常 +>- 插入异常:无法正确表示信息 +>- 删除异常:丢失有效信息 + +****** + +**规范的表设计** + +> - 尽可能少的数据冗余 +> - 没有插入异常 +> - 没有删除异常 +> - 没有更新异常 + +### 2.第一范式(1NF) + +==关系中的每个属性必须是不可再分的简单项==,不能是属性组合,即属性的取值必须是不可拆分的原子值 + +比如一个地址列,中国北京市 拆成 中国 北京 + +(根据情况而定) + +******** + +### 3.第二范式(2NF) + +==表必须符合第一范式 ,表中的每列必须依赖主键== + +就是要求每个表只描述一件事情 + +比如: + +| 学号 | 姓名 | 课程号 | 课程名称 | 成绩 | +| ---- | ---- | ------ | --------- | ---- | +| s001 | 张三 | k001 | java | 60 | +| s002 | 李四 | k001 | sqlserver | 75 | +| s001 | 张三 | k002 | java | 95 | + +因为没有合适的主键会用联合主键学号和课程号,会出现部分依赖,成绩依赖于课程,课程依赖于课程号,姓名依赖于学号 + +要消除部分依赖,即把字段拆开形成新的表:学生表 课程表 成绩表 + +**** + +### 4.第三范式(3NF) + +**确保每列都和主键列直接相关,而不是间接相关** + +定义: + +==如果一个关系满足2NF,并且除了主键外的其他列既不部份依赖也不传递依赖于主键列,则满足第三范式== + +C依赖B依赖A就叫做**传递依赖** + +******* + +==规范过程即拆分过程:把表分的非常细,一旦出现多对一就会有主外键关系,N->1== +``` \ No newline at end of file -- Gitee