mysql怎么设计库、设计表
一. 设计表/库
设计思想就是要分析表每个字段的具体参数,包括但不限于以下几点:
约束?
NOT NULL, PRIMARY KEY, UNIQUE KEY, DEFAULT, FOREIGN KEY, REFERENCES [ON DELETE CASCADE/ SET NULL/ NO ACTION/ RESTRICT/ SET DEFAULT]
能否复用?
使用额外字段tpye加以区分。
逻辑删除?
使用status字段,is_delete 反范式,create_time
一对多(多对多即两个一对多)的表横行纵向互换?
横变纵:即把这个用户id对应的频道表多加几行。小缺点,id赘余。
纵变横:反过来,即把用户id对应的表多加几列。小缺点,空间浪费。
为减少多表查询的次数需要合并表,怎么解决一个字段保存多个值呢?
用json。
{'type':3, 'pic':{url1, url2, url3},josn基于longtext类型创建的。 mysql的json这么强大,但用户和频道这种最好不要用json,一个字段对应的数据太大。get。
大数据时选json还是纵向连表?
选json:少量多值,不经常变化,需大量查询的。如文章的封面。
选拆表:不知道有多少的,需大量修改的。比如搜索历史记录的表,比如用户关注你知道关注多少个吗。 关注表里互粉的有两条记录。 数据时代都是逻辑删除。 表的复用。
三级回复再建表?
不用用自关联。 为了查询效率,可以做冗余字段设计(空间换时间的思想,属于一种反范式设计)
看一个人的数据库设计能力?
用了多少反范式的设计,越多越强大。 粉丝,点赞数,评论数全部横向进去,空间换时间的思想。 根据数据范围选类型,每个字段的每个参数都得考虑,我的天。
语言性能?
公司初期用python,后期用go。python能创意快速实现,性能瓶颈地方调用c库。 没有related_name照样能关联查询。
二. 三范式
1NF:列的原子性,列不可再分。
2NF:满足1NF;必须有一个主键;非主键字段必须完全依赖于主键,而不能只依赖于主键的一部分。
3NF:满足2NF;非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。需要把依赖的表拆了。
2说的是字段完全依赖,3说的是字段直接依赖。
三. E-R模型
entity-relation,实体关系模型,描述数据库存储数据的结构模型。
E-R模型的使用场景:建模工具如:power designer,db desinger等这些软件来画出实体-关系模型(E-R模型),然后根据三范式设计数据库表结构。
实体: 用矩形表示,并标注实体名称 属性: 用椭圆表示,并标注属性名称 关系: 用菱形表示,并标注关系名称 关系也是一种数据,需要通过一个字段存储在表中(多的一方)。
作者留言
原创不宜,如果觉得本文对你有帮助,记得打赏作者噢O(∩_∩)O,你的一点点爱心是我创作路上最大的动力~
最新文章
- angular源码分析:$compile服务——directive他妈
- iOS 多语言的切换
- mysql集群 MySQL Cluster
- eclipse 导入Maven项目的问题
- [转载]Java应用程序中的内存泄漏及内存管理
- CentOS中vsftp安装与配置
- 黄聪:异步加载JS的4种方式(详解)
- MySql计数器,如网站点击数,如何实现高性能高并发的计数器功能
- CentOS修改SSH默认端口
- HDOJ 2089 不要62(打表)
- SurfaceView类透明背景设置
- zendStudio常用快捷键整理
- Ubuntu系统下在Eclipse中使用真实手机运行调试Android应用
- 【jQuery】smartMenu右键自定义上下文菜单插件(似web QQ)
- es6对象字面量增强
- 如何设置默认以管理员权限运行cmd
- learning makefile set debug level and build command
- 关于cp命令的编写
- java并发编程之三--CyclicBarrier的使用
- SpringData_JpaRepository接口