diff --git "a/33\350\260\267\345\205\206\346\230\216/33\350\260\267\345\205\206\346\230\216.md" "b/33\350\260\267\345\205\206\346\230\216/33\350\260\267\345\205\206\346\230\216/8\346\234\21029\346\227\245\345\273\272\345\272\223\345\273\272\350\241\250\344\275\234\344\270\232.md" similarity index 100% rename from "33\350\260\267\345\205\206\346\230\216/33\350\260\267\345\205\206\346\230\216.md" rename to "33\350\260\267\345\205\206\346\230\216/33\350\260\267\345\205\206\346\230\216/8\346\234\21029\346\227\245\345\273\272\345\272\223\345\273\272\350\241\250\344\275\234\344\270\232.md" diff --git "a/33\350\260\267\345\205\206\346\230\216/33\350\260\267\345\205\206\346\230\216/8\346\234\21031\346\227\245sql\350\277\233\351\230\266\347\254\224\350\256\260.md" "b/33\350\260\267\345\205\206\346\230\216/33\350\260\267\345\205\206\346\230\216/8\346\234\21031\346\227\245sql\350\277\233\351\230\266\347\254\224\350\256\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..68e33b5a112208856e8c3d79cec2ff1ac8caac2b --- /dev/null +++ "b/33\350\260\267\345\205\206\346\230\216/33\350\260\267\345\205\206\346\230\216/8\346\234\21031\346\227\245sql\350\277\233\351\230\266\347\254\224\350\256\260.md" @@ -0,0 +1,351 @@ + + + + + + + + +[TOC] + + + +# 数据库设计相关理论 + +## 一、数据库设计是什么?它重要吗? + +1. 根据业务需求的描述,设置或者配置数据库的各项参数,包括数据库、数据库表、数据库表的字段、主键、外键、约束、索引、存储过程、函数、视图等等一系列东西的过程 +2. 重要不?很重要,或者说非常的重要,因为,现代的绝大多数的应用需要数据库的支撑 + +## 如何进行数据库的设计 + +1. 根据业务的需求设计数据库,有一套规范叫 三范式 +2. 还有一种设计工具PowerDesigner + +![img](https://gitee.com/gu-zhaoming/database-advanced-class-notes-1/raw/master/%E8%80%81%E8%83%A1%E6%9D%A5%E4%B9%9F/imgs/db.png) + + + +# 数据库表关系的表示方法 + +| id | 学生姓名 | 性别 | +| ---- | -------- | ---- | +| 1 | 郑美婷 | 女 | +| 2 | 牛奇伟 | 男 | +| 3 | 商赢旭 | 男 | +| 4 | 方荣星 | 女 | +| 5 | 李子源 | 男 | + +主键:正常情况下 是指在一条记录中,标识这一行的唯一值 通常主键都是一个叫id的列,其中常见的数据类型:int、long、guid + +## 一、一对一关系 + +``` +1. 通过外键关系,再加唯一约束的方式来实现一对一关系 +2. 通过主键 +``` + +## 二、一对多关系 + +``` +1. 通过外键关系来实现 +``` + +## 三、多对多关系 + +``` +1. 通过额外的一张表,表中有至少两个字段,来分别指向另外两张表的主键id +``` + + + +# 数据库设计 + +**图书管理系统** + +图书信息表 + +| 图书编号 | 书名 | 作者编号 | 出版社编号 | 售价 | +| -------- | -------- | -------- | ---------- | ---- | +| LI1001 | 我的世界 | AU001 | PU001 | 20.0 | +| LI1002 | 骆驼祥子 | AU002 | PU002 | 80.0 | +| LI1003 | 童年 | AU001 | PU003 | 40.0 | + +**作者信息表** + +| 作者编号 | 作者姓名 | 出生年月 | 性别 | 联系方式 | 代表作 | +| -------- | -------- | ---------- | ---- | -------- | ---------- | +| AU001 | 钱钟书 | 1934-12-08 | 男 | | 围城 | +| AU002 | 金庸 | 1934-12-08 | 男 | | 射雕英雄传 | +| AU003 | 古龙 | 1934-12-08 | 男 | | 小李飞刀 | + +**出版社信息表** + +| 出版社编号 | 出版社名称 | 创建日期 | 性质 | 法人 | 地址 | +| ---------- | -------------- | ---------- | ---- | ------ | -------- | +| PU001 | 清华大学出版社 | 1934-12-08 | 国营 | 邹海滨 | 闽大 | +| PU002 | 新华人民出版社 | 1934-12-08 | 私有 | 张鑫 | 望云楼 | +| PU003 | 邮电大学出版社 | 1934-12-08 | 国营 | 包子 | 浙江温州 | + +图书库存信息表 + +| 图书编号 | 图书库存编号 | 存放区域 | 入库时间 | +| -------- | ------------ | -------- | -------------- | +| LI1001 | 0001 | AR0001 | 清华出版 | +| LI1001 | 0002 | AR0001 | 清华出版 | +| LI1001 | 0003 | AR0003 | 新华人民出版社 | + +图书存放区域表 + +| 区域编号 | 区域名称 | 负责的管理员 | 备注 | +| -------- | ---------- | ------------ | --------------------- | +| AR0001 | 儿童读物 | 001 | 位于A区中间的书架 | +| AR0002 | 小学生读物 | 002 | 位于C区最靠里面的书架 | +| AR0003 | 中学生读物 | 003 | D区最外面书架 | + +图书管理员表 + +| 管理员编号 | 管理员名称 | 联系方式 | 职务 | +| ---------- | ---------- | -------- | ---------- | +| 001 | 李子源 | 10086 | CEO | +| 002 | 陈敏钊 | 10010 | CEO助理 | +| 003 | 王益达 | 10000 | 普通管理员 | + +借还表 + +| 图书库存编号 | 借还时间 | 借还类型 | 管理员编号 | 借书人编号 | +| ------------ | --------------------- | -------- | -------------- | ---------- | +| LI1001 | 2021-10-18 18:00:07 | BO0001 | 清华出版 | 20.0 | +| LI1002 | 骆驼祥子 | BO0001 | 清华出版 | 80.0 | +| LI1003 | 童年 | BO0001 | 新华人民出版社 | 40.0 | + +借还类型表 + +| 类型编号 | 类型名称 | +| -------- | -------- | +| BO0001 | 借 | +| BO1002 | 还 | + +## 数据库设计的理论依据-范式 + +1. 第一范式:确保每一个列(或者叫字段,或者叫属性)都具有原子性,即分无可分。 + + > 栗子:地址字段 福建省龙岩市新罗区曹溪街道闽西职技术学院南校区望云楼二楼第三实训室,如果业务上有需要区分省市县这些信息的话,那么在数据库设计的时候,就应该拆分这些为多个字段,如果没有则认为违反了原子性,违反了第一范式 + + > 第一范式是数据库设计理论中要求最低的一个规范 + +2. 第二范式:要求每一个字段都依赖于主键 + +3. 第三范式:要求每一个字段都直接依赖于主键 + +# 文章管理系统的数据库设计 + +## 一、头脑风暴 猜想文章管理系统需要管理到的信息都有什么 + +1. 管理员 +2. 文章信息 +3. 文章类别 +4. 文章评论 +5. 点赞、踩 +6. 文章浏览量 +7. 图片信息 +8. 广告链接 +9. 友情链接 +10. 收费不收费,收费多少钱 +11. 转发量 +12. 登录信息 +13. 排行 +14. 作者专栏 +15. 打赏 +16. 网站信息 +17. 文章周边 +18. 推荐类型(热门、编辑推荐、置顶) + +## 二、整理头脑风暴产生的信息,确定去留 + +1. 网站信息(网站名称、网站的logo、网站的简介、备案信息) +2. 文章分类信息(类似栏目) +3. 文章热度类型(如热门、编辑推荐、置顶) +4. 文章信息 +5. 文章评论 +6. 用户对文章的操作类型(赞一下、踩一下、浏览一下) +7. 用户对文章的操作记录 +8. 图片信息 +9. 友情链接 +10. 广告链接 + +1. 打赏 +2. 用户信息 +3. 角色信息 +4. 用户角色信息 + +## 三、根据得到的信息,尝试设计数据库表 + +1. 网站信息 + +| 网站编号 | 网站名称 | 网站的Logo图片编号 | 网站简介 | 工信部备案 | 公安备案 | +| -------- | -------- | ------------------ | ------------ | ----------- | ---------- | +| W0001 | 博客园 | P0001 | 程序猿的园子 | 备-XXXX | 备-XXX | +| W0002 | CSDN | P0002 | 程序猿的园子 | 备-XXXX | 备-XXX | +| W0003 | 博海拾贝 | P0003 | 程序猿的园子 | 备-XXXX | 备-XXX | + +1. 文章分类信息 + +| 文章分类编号 | 分类名称 | 是否启用 | 是否删除 | 创建时间 | 更新时间 | 显示顺序 | 备注 | +| ------------ | -------- | -------- | -------- | --------------------- | --------------------- | -------- | -------- | +| Cate0001 | 校园一角 | 是 | 否 | 2019-03-12 14:35:28 | 2019-03-12 14:35:28 | 0 | 没有备注 | +| Cate0002 | 新闻时事 | 是 | 否 | 2019-03-12 14:35:28 | 2019-03-12 14:35:28 | 0 | 没有备注 | +| Cate0003 | 领导风采 | 是 | 否 | 2019-03-12 14:35:28 | 2019-03-12 14:35:28 | 0 | 没有备注 | + +1. 文章热度类型 + +| 热度类型编号 | 热度类型名称 | 是否启用 | 是否删除 | 创建时间 | 更新时间 | 显示顺序 | 备注 | +| ------------ | ------------ | -------- | -------- | ------------------- | ------------------- | -------- | ------------------------ | +| Hot0001 | 热门 | 是 | 否 | 2021-5-15 8:16:08 | 2021-5-15 8:17:15 | 18 | 这是一个没有什么用的备注 | +| Hot0002 | 编辑推荐 | 是 | 否 | 2021-5-15 8:16:08 | 2021-5-15 8:17:15 | 18 | 这是一个没有什么用的备注 | +| Hot0003 | 置顶 | 是 | 否 | 2021-5-15 8:16:08 | 2021-5-15 8:17:15 | 18 | 这是一个没有什么用的备注 | + +1. 文章信息 + +| 文章编号 | 文章标题 | 简介 | 详细内容 | 文章分类编号 | 作者编号 | +| ----------- | ------------ | ---------------------- | -------- | ------------ | -------- | +| Article0001 | 康美之恋 | 康美药业的宣传歌曲 | 图文信息 | Hot0002 | User0001 | +| Article0002 | 星门 | 小说,有意思的玄幻小说 | 图文信息 | Hot0003 | User0001 | +| Article0003 | 锦衣 | 小说,有意思的历史小说 | 图文信息 | Hot0001 | User0001 | +| Article0004 | 我从星海回来 | 小说,有意思的科幻小说 | 图文信息 | Hot0002 | User0002 | + +1. 文章评论 + +| 文章评论编号 | 文章编号 | 评论内容 | 评论作者编号 | 评论时间 | +| ------------ | ----------- | -------------------- | ------------ | ------------------ | +| Comment0001 | Article0004 | 真好看,墙裂推荐 | User0002 | 2021-05-20 8:20:18 | +| Comment0002 | Article0004 | 反正很好看 | User0002 | 2021-05-20 8:20:18 | +| Comment0003 | Article0004 | 她真的很好看 | User0002 | 2021-05-20 8:20:18 | +| Comment0004 | Article0004 | 好看,想不出来词儿了 | User0002 | 2021-05-20 8:20:18 | + +1. 对文章的操作类型(这里指浏览、赞一下、踩一下) + +| 操作类型编号 | 操作类型名称 | +| ------------ | ------------ | +| Op0001 | 浏览 | +| Op0002 | 赞 | +| Op0003 | 踩 | +| Op0004 | 收藏 | +| Op0005 | 转发分享 | + +1. 文章的操作记录(指浏览记录、赞、踩、转发的记录) + +| 操作记录编号 | 文章编号 | 操作类型编号 | 操作者编号 | 操作时间 | +| ------------ | ----------- | ------------ | ---------- | --------------------- | +| OpRecord0001 | Article0001 | Op0001 | User0001 | 2012-04-16 05:30:30 | +| OpRecord0002 | Article0001 | Op0002 | User0001 | 2012-04-16 05:31:30 | + +1. 图片信息 + +| 图片编号 | 图片原始名称(包含扩展名) | 图片当前名称(包含扩展名) | 相对路径 | 网站编号 | +| ------------------------------ | -------------------------- | -------------------------- | ------------------------------------- | -------- | +| TEXT-540864s6d5fe8asd-sdfet | 宝宝真漂亮.png | aksjdfljetkjs.png | UploadFiles/2021/09/aksjdfljetkjs.png | W0001 | +| TEXT-5adsf864sa55dfe8asd-sdfet | 包子今天没有刷牙.png | oiuoi.png | UploadFiles/2021/09/oiuoi.png | W0001 | + +1. 友情链接 + +| 友情链接编号 | 链接的名称 | 链接标题 | 链接 | +| ------------ | ---------- | ------------------ | ------------------------------------------------------------ | +| Link0001 | 百度的广告 | 百度一下,你就知道 | [http://baidu.com](https://gitee.com/link?target=http%3A%2F%2Fbaidu.com) | +| Link0002 | 谷歌的广告 | 谷歌,你值得拥有 | [http://google.com](https://gitee.com/link?target=http%3A%2F%2Fgoogle.com) | +| Link0001 | 博客园 | 技术改变命运 | [http://cnblog.com](https://gitee.com/link?target=http%3A%2F%2Fcnblog.com) | + +1. 广告链接 + +| 广告编号 | 广告标题 | 广告图片编号 | 广告播放地址编号 | 广告链接 | 广告商 | +| -------- | ------------------ | --------------------------- | ---------------- | ------------------------------------------------------------ | ------------ | +| AD0001 | 美白肌肤你值得拥有 | TEXT-540864s6d5fe8asd-sdfet | ADAD00011 | [http://xxx.com/klsdjfklasdf.html](https://gitee.com/link?target=http%3A%2F%2Fxxx.com%2Fklsdjfklasdf.html) | 百度广告联盟 | +| AD0002 | 让孩子更好一些 | TEXT-540864s6d5fe8asd-sdfet | ADAD0002 | [http://xxx.com/klsdjfklasdf.html](https://gitee.com/link?target=http%3A%2F%2Fxxx.com%2Fklsdjfklasdf.html) | 谷歌广告联盟 | +| AD0003 | 女人就应该投资自己 | TEXT-5adsf864sasd-sdfet | ADAD0003 | [http://xxx.com/klsdjfklasdf.html](https://gitee.com/link?target=http%3A%2F%2Fxxx.com%2Fklsdjfklasdf.html) | 百度广告联盟 | + +1. 广告播放地址 + +| 广告播放地址编号 | 广告播放地址 | 所在版块 | +| ---------------- | -------------------- | -------- | +| ADAD0001 | 网站首页的轮播图位置 | 首页 | + +1. 打赏 + +| 打赏编号 | 用户编号 | 文章编号 | 打赏金额 | 打赏时间 | 打赏的方式编号 | +| ---------- | -------- | ----------- | -------- | --------------------- | -------------- | +| Reward0001 | User0001 | Article0003 | 50 | 2021-05-06 17:40:30 | RewardType0001 | +| Reward0001 | User0002 | Article0003 | 0 | 2021-05-06 17:40:30 | RewardType0002 | + +1. 打赏方式 + +| 打赏方式编号 | 打赏方式名称 | +| -------------- | ------------ | +| RewardType0001 | 钱 | +| RewardType0002 | 物 | + +1. 用户信息 + +| 用户编号 | 用户名 | 密码 | +| -------- | -------- | ---- | +| User0001 | admin | 113 | +| User0002 | user0001 | 113 | +| User0003 | user0002 | 113 | +| User0004 | user0003 | 113 | + +1. 角色信息 + +| 角色编号 | 角色名称 | +| -------- | ---------- | +| Role0001 | 超级管理员 | +| Role0002 | 财务总监 | +| Role0003 | CTO | + +1. 用户角色信息 + +| 用户角色编号 | 用户编号 | 角色编号 | +| ------------ | -------- | -------- | +| UR0001 | User0001 | Role0001 | +| UR0002 | User0001 | Role0002 | +| UR0003 | User0001 | Role0003 | +| UR0004 | User0003 | Role0001 | + + + +# 数据持久化 + +``` +## 数据易失,希望保存数据,则关系到一个数据持久化的概念 + +## 数据持久化的方式 保存到文件、保存到数据库(实际上也保存到数据库文件当中) + +## 数据放在硬盘上,放在文件当中,那么你总需要这个数据按一定的逻辑或者层次进行摆放 +``` + +## + +# sql server三范式理解 + +### 第一范式: + +```sql +--指数据表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的 某个属性不能有多个值或者不能有重 复的属性。 +``` + +### 第二范式: + +```sql +--如果一个数据表已经满足第一范式,而且该数据表中的任何一个非主键字段的数值都 依赖于该数据表的主键字段,那么该 数据表满足第二范式。 这个表中,就是这个选出来的字段中,非主键字段要完全依赖主键字段 +``` + +### 第三范式: + +```sql +--如果一个数据表已经满足第二范式,而且该数据表中的任何两个非主键字段的数值之 间不存在函数依赖关系,那么该数据 表满足第三范式。 这个表中,就是这个选出来的字段中,不能有 函数依赖 关系 +``` + +### BC范式 + +```sql +--在关系模式中每一个决定因素都包含候选键,也就是说,只要属性或属性组A能 够决定任何一个属性B,则A的子集中必须 有候选键。BCNF范式排除了任何属性(不光 是非主属性,2NF和3NF所限制的都是非主属性)对候选键的传递依赖与部分 依赖。 +``` + diff --git "a/33\350\260\267\345\205\206\346\230\216/9\346\234\2101\346\227\245\344\275\234\344\270\232/9\346\234\2101\346\227\245\346\225\231\345\255\246\347\256\241\347\220\206\347\263\273\347\273\237cdm.png" "b/33\350\260\267\345\205\206\346\230\216/9\346\234\2101\346\227\245\344\275\234\344\270\232/9\346\234\2101\346\227\245\346\225\231\345\255\246\347\256\241\347\220\206\347\263\273\347\273\237cdm.png" new file mode 100644 index 0000000000000000000000000000000000000000..81265b9bb857d16367c5fd5eba7215b02cf10800 Binary files /dev/null and "b/33\350\260\267\345\205\206\346\230\216/9\346\234\2101\346\227\245\344\275\234\344\270\232/9\346\234\2101\346\227\245\346\225\231\345\255\246\347\256\241\347\220\206\347\263\273\347\273\237cdm.png" differ diff --git "a/33\350\260\267\345\205\206\346\230\216/9\346\234\2101\346\227\245\344\275\234\344\270\232/9\346\234\2101\346\227\245\346\225\231\345\255\246\347\256\241\347\220\206\347\263\273\347\273\237pdm.png" "b/33\350\260\267\345\205\206\346\230\216/9\346\234\2101\346\227\245\344\275\234\344\270\232/9\346\234\2101\346\227\245\346\225\231\345\255\246\347\256\241\347\220\206\347\263\273\347\273\237pdm.png" new file mode 100644 index 0000000000000000000000000000000000000000..a234c21e4b2e7c213b7b078d681e1d23c62ac44c Binary files /dev/null and "b/33\350\260\267\345\205\206\346\230\216/9\346\234\2101\346\227\245\344\275\234\344\270\232/9\346\234\2101\346\227\245\346\225\231\345\255\246\347\256\241\347\220\206\347\263\273\347\273\237pdm.png" differ diff --git "a/33\350\260\267\345\205\206\346\230\216/9\346\234\2101\346\227\245\344\275\234\344\270\232/9\346\234\2101\346\227\245\351\223\266\350\241\214\347\256\241\347\220\206\347\263\273\347\273\237cdm.png" "b/33\350\260\267\345\205\206\346\230\216/9\346\234\2101\346\227\245\344\275\234\344\270\232/9\346\234\2101\346\227\245\351\223\266\350\241\214\347\256\241\347\220\206\347\263\273\347\273\237cdm.png" new file mode 100644 index 0000000000000000000000000000000000000000..88a48f7232fa2bea9503ee01c965b116408343a7 Binary files /dev/null and "b/33\350\260\267\345\205\206\346\230\216/9\346\234\2101\346\227\245\344\275\234\344\270\232/9\346\234\2101\346\227\245\351\223\266\350\241\214\347\256\241\347\220\206\347\263\273\347\273\237cdm.png" differ diff --git "a/33\350\260\267\345\205\206\346\230\216/9\346\234\2101\346\227\245\344\275\234\344\270\232/9\346\234\2101\346\227\245\351\223\266\350\241\214\347\256\241\347\220\206\347\263\273\347\273\237pdm.png" "b/33\350\260\267\345\205\206\346\230\216/9\346\234\2101\346\227\245\344\275\234\344\270\232/9\346\234\2101\346\227\245\351\223\266\350\241\214\347\256\241\347\220\206\347\263\273\347\273\237pdm.png" new file mode 100644 index 0000000000000000000000000000000000000000..792865a080fa904fb61e1a4b9ead6f6d02c4f7d7 Binary files /dev/null and "b/33\350\260\267\345\205\206\346\230\216/9\346\234\2101\346\227\245\344\275\234\344\270\232/9\346\234\2101\346\227\245\351\223\266\350\241\214\347\256\241\347\220\206\347\263\273\347\273\237pdm.png" differ