写了N久的Yii 发现对数据库设计还是小白~
2017-05-08 12:01
197 查看
最近在北哥qq群里发现很多人对数据库的命名规则以及yii2和mysql的一些东东比较迷糊,这里把北哥开发项目时候对mysql的一些规则分享给大家,不见得最优,但求对你有点用处就好,除此之外,还有几个gii和数据库搭配小技巧。
视频学习
存储引擎使用InnoDB
不在数据库中存放图片、文件等
变成字符串尽量使用varchar类型
库名、表名、字段名均不适用保留字
库名、表名、字段名、索引名使用小写字母
多个单词用下划线,要做到见名知意
库表名不要设计过长,越少越好
使用varchar来存储变长字符串,但是要注意varchar(M)里的M是指字符数而不是字节数
字段类型满足最小化原则,非负整数使用unsigned
浮点数使用decimal来存储,用float有时候会有问题
少用blob text
使用datetime存放时间(不用timestamp,因只能存到2038年,而且现在在占位上和datetime节省优势越来越低)
2、一个表内的Null过多会影响优化器。
当然这不是硬性的,但是你需要统一,不要一会单数一会复数。
数据表的脚本化
请使用migrate来处理新建、修改、删除表等操作,虽然它并不能进行数据的还原,但是对于结构,还是不错的。视频学习
库表的一些设置法则
表字符集选择UTF8,如果要存放emoji,则统一选择UTF8mb4(MySQL5.5.3以后支持)存储引擎使用InnoDB
不在数据库中存放图片、文件等
变成字符串尽量使用varchar类型
库名、表名、字段名均不适用保留字
库名、表名、字段名、索引名使用小写字母
多个单词用下划线,要做到见名知意
库表名不要设计过长,越少越好
字段的一些规范
除非你的字段真的想存Null,否则所有字段均定义为Not Null使用varchar来存储变长字符串,但是要注意varchar(M)里的M是指字符数而不是字节数
字段类型满足最小化原则,非负整数使用unsigned
浮点数使用decimal来存储,用float有时候会有问题
少用blob text
使用datetime存放时间(不用timestamp,因只能存到2038年,而且现在在占位上和datetime节省优势越来越低)
为何定义不用Null?
1、对于InnoDB来说,需要有额外的字节来存储,浪费。2、一个表内的Null过多会影响优化器。
关于将时间存储为int格式的问题
这更多算一个mysql的技巧,将时间存储为int的时间戳形式,这样的设置可能带来运算上的方便,但是也失去了时间类型的意义,有利有弊吧。表是单数还是复数
在Laravel框架中对表的命名有一些推荐(均为复数),Yii并没有推荐,北哥习惯使用单数,代表一种抽象类型,而且使用gii的时候也特别方便。当然这不是硬性的,但是你需要统一,不要一会单数一会复数。
关于字段备注
首先要说的是,每个数据表的字段必须要写,除此之外,当你用gii生成一个模型的时候,选择上“Generate Labels from DB Comments”,则生成的模型中attributeLables的值自动就是你的字段备注,方便的不要不要的~关于表前缀的问题
当我们数据库中存在不同应用的时候,我们喜欢用表前缀来区分,比如discuz_、ecshop_,在使用gii的时候,选择上“Use Table Prefix”,则生成的模型不会带这些前缀,且自动适配,这个功能也很贴心。相关文章推荐
- 数据库设计中一个矛盾:数据库外键,用还是不用?你怎么看.?
- 数据库设计中一个矛盾:数据库外键 你用还是不用(2) 继续....
- 数据库设计中一个矛盾:数据库外键,用还是不用?你怎么看.?
- 数据库设计中一个矛盾:数据库外键,用还是不用?
- 浅谈系统优化设计--复杂运算放在逻辑层还是在数据库层?
- 数据库设计中一个矛盾:数据库外键,用还是不用
- 数据库设计中一个矛盾:数据库外键,用还是不用?你怎么看
- 数据库设计还是不是信息系统的核心?
- 今天发现数据库到处都有,还是学习一种比较好
- 今天发现数据库到处都有,还是学习一种比较好
- 数据库设计中的选择:实体成为属性还是表;二元关系还是多元关系;
- 关系数据库设计中,用中间表好还是直接设定主外键关联好?
- 数据库设计中一个矛盾:数据库外键 你用还是不用(2) 继续....
- 数据库的设计原则:关联还是不关联?(转载)
- 打开emap设计器后,发现没有数据库图标
- 数据库设计中是设计联合主键还是唯一索引+单一主键好?
- [OOAD]是数据库设计,还是类图设计?
- 数据库的设计原则:关联还是不关联?
- SSH:修改数据库名,jdbc.properties也修改了,但是后发现指向还是旧数据库
- 数据库设计中一个矛盾:数据库外键,用还是不用?你怎么看.?