简述:目前我们的表设计,最高级别是6NF,对于PHP程序而已,表设计满足3NF即可
如何满足3NF,首先得满足1NF,再满足2NF,再满足3NF即可。更高级别依次类推。
一、1NF定义
(1)、表的列不能再次被拆分(表的列具有原子性)
(2)、表中不能有重复的列
特殊:
(1)、只要是关系型数据,就天然满足1NF
(2)、常见数据库
关系型数据库(Mysql,Oracle,Sql Server,Informix,DB2,Postgres)
非关系型数据库(NoSql,Redis,MongoDB)
二、2NF定义
(1)、表中的行数据,不可以有两条一模一样的行数据,一般表通过设计主键自增字段来进行解决这个问题
三、3NF定义
(1)、表的列信息可以被隐形或者显示的推导出来
假设:一个学生表,一个学生班级表,通过读取学生表中存储的班级表ID,进行左查询学生表中的学生班级表的详细信息,既满足学生班级表的详细信息
(2)、反3NF思维
假设:一个相册详情页,每张图片切换显示都需要记录每张图片的点击数,以及所有图片点击综合
表设计:
album 表
id title viewclick
album_pics
id title viewclick album_id
表这样设计即可,按照正常3NF设计标准,album是不需要viewclick,而是直接读取album_pics中的数据然后count,但是album_pics是一个海量数据表,如果进行select操作是非常消耗资源的,所以我们使用反3NF设计标准,增加一个viewclick字段,每次图片增加一次记录数的时候album表的viewclick对应+1,可以通过PHP程序控制执行SQL语句,当然也可以创建触发器进行触发操作
- 前端
- 技巧汇总
- 构建 Node + Webpack + React 热加载开发环境
- React
- Redux
- Webpack
- ES6
- HTML5+CSS3
- Javascript
- JS超简洁拖动代码
- jQuery
- 后端
- 技巧汇总
- 代码中特殊的注释技术——TODO、FIXME和XXX的用处
- PHP
- Xdebug不解之谜
- PHP时间获取
- PHP递归优化 使用匿名函数进行递归
- PHP 发起POST请求
- PHP获得数组的交集与差集
- PHP递归获取下级数组,可指定ID,一维数组
- PHP 判断是否为Get/Post/Ajax提交
- PHP实现分流队列平均显示信息
- PHP多维数组 指定列排序
- PHP 类Class详解 笔记记录
- PHP取整函数详解
- Node
- Elasticsearch
- 数据库
- 技巧汇总
- Mysql
- Mysql分区表实现
- Mysql union与union all 查询
- Mysql 表中表查询
- Mysql 分组查询 与 分组条件查询
- MySQL 添加列,修改列,删除列
- Mysql优化之:构建海量表,定位慢查询
- Mysql优化之:表的设计满足3NF
- Mysql优化常见方法
- Mysql存储过程详解
- 运维
- 技巧汇总
- Linux
- Linux Centos系统下 设置代理服务器上网
- Centos7增加开机启动脚本
- centos 挂载windows共享目录
- CentOS设置SSH Key登录
- Linux/CentOS单网卡绑定多个IP
- Windows
- Win10开机启动项设置全解攻略
- PuTTY连接Linux服务器经常断线解决方案
- Docker
- Docke启动文件 docker-compose.yml
- Docker命令简介(未完)
- Docker闲杂笔记
- Apache
- Nginx
- Nginx配置upstream实现负载均衡
- Nginx负载均衡学习
- IDE
- 技巧汇总
- WebStorm
- PHPStorm
- 协作
- 技巧汇总
- Git
- git 放弃本地修改 强制更新
- git编译安装与常用命令
- Svn