MYSQL WEB数据库的设计归范-1命名规范
来源:互联网 发布:如何扫描二维数据 编辑:程序博客网 时间:2024/06/06 09:22
mysql 现在应用于web方向,游戏方向和OLAP方向。发现在平时运维中,很多开发错用,乱用mysql,什么功能都堆到数据库上,下面简单聊一聊web方向,mysql应该如何设计和使用。
[数据库环境介绍]
通常来讲,各个互联网公司的数据库分为5个数据库环境:
1. dev : 开发环境, 开发可读写,可修改表结构; 常用的163的数据库表; 开发人员可以修改表结构, 可以随意修改其中的数据; 但是需要保证不影响其他开发同事;
2. qa : 测试环境, 开发可读写, 开发人员可以通过工具修改表结构;
3. sim: 模拟环境, 开发可读写, 通过web平台;发起上线请求时,会先在这个环境上进行预执行, 这个环境也可供部署上线演练或压力测试使用 可以读写;
4. real: 生产数据库从库(准实时同步),只读环境,不允许修改数据,不允许修改表结构; 供线上问题查找,数据查询等使用;
5. online: 线上环境;开发人员不允许直接在线上环境进行数据库操作,如果需要操作必须找DBA进行操作并进行相应记录;
这些环境的机器,一定要做到权限划分明确,读写帐号分离,并且有辨识度,能区分具体业务。例如用户名w_wap, r_wap 能看出来,读写帐号是wap应用的。
[数据库命名规范]
1. 尽量简洁明义,能够一眼看出来这个数据库是用来做什么的;
2. 使用名词作为数据库名称,并且只用英文,不用中文拼音;
3. 使用英文字母,全部小写,控制在3-7个字母以内;
4. 如果有多个单词,则使用下划线隔开,不建义驼峰命名;
例如,每个公司都有crm业务,那就叫做xx_crm, 字符集统一utf8。字符集踩过的坑很多,为了通用性统一utf8。
create database xx_crm default character set=utf8;
[表命名规范]
1. 具备统一前缀,对相关功能的表应当使用相同前缀,如acl_xxx,house_xxx,ppc_xxx;其中前缀通常为这个表的模块或依赖主实体对象的名字,通常来讲表名为:业务_动作_类型,或是业务_类型;
2. 表名使用英文小写单词,如果有多个单词则使用下划线隔开;
3.表名简介,使用常见单词,避免使用长单词和生僻词;
4. 表引擎取决于实际应用场景及当前数据库中的已经存在的存储引擎;日志及报表类表建议用myisam,与交易,审核,金额相关的表建议用innodb引擎。总体来讲数据库默认innodb;
5. 数据表必须有主键,且建议均使用auto_increment的id作为主键(与业务无关),和业务相关的要做为唯一索引;
6. 默认使用utf8字符集(由于数据库定义使用了默认,数据表可以不再定义,但为保险起见,建议都写上);
7. 所有的表都必须有备注,写明白这个表中存放的数据内容;
8. 预估表数据量,如果数据量较大(超过500w)则需要考虑分表策略。可以等量均衡分表或根据业务规则分表均可。要分表的数据表必须与DBA商量分表策略;
9. 职责相近的表,命名规则应该相同;如合同申请,账户信息,交友相关等;
举个例子,一张在线冲值记录表:user_bank_deposit 这个就非常符合标准,如果叫做userBankDeposit或是user_chongzhi,就非常不友好。
CREATE TABLE `house_refresh_log` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增ID', `fangid` int(11) NOT NULL COMMENT '房贴子ID', `refresh_time` int(11) NOT NULL COMMENT '刷新时间', PRIMARY KEY (`id`), UNIQUE KEY `fangid` (`fangid`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='房刷新记录表'
[字段命名规范]
1. 数据库字段命名与表名命名类似:
2. 使用小写英文单词,如果有多个单词使用下划线隔开;
3. 使用简单单词,避免生僻词;
4. 字段应当有注释,描述该字段的用途及可能存储的内容,如枚举值则建议将该字段中使用的内容都定义出来;
5. 是别的表的外键均使用xxx_id的方式来表明;
6. 表的主键一般都约定成为id,自增类型;
7. 时间字段,除特殊情况一律采用int来记录unix_timestamp;
8. 网络IP字段,除特殊情况一律用bigint来记录inet_aton值;
9. 所有字段,均为非空,最好显示指定默认值;
10. 有些驱动对tinyint支持不够好,通常建义按容量来选择字段;
11. text字段尽量少用,或是拆到冗余表中;
CREATE TABLE `wanted_post` ( `id` int(10) NOT NULL AUTO_INCREMENT, `puid` int(10) unsigned NOT NULL, `user_id` int(10) NOT NULL COMMENT '发贴用户的id', `username` varchar(50) NOT NULL COMMENT '发贴用户的用户名', `city` smallint(4) NOT NULL COMMENT '所在城市', `ip` bigint(14) NOT NULL COMMENT '发帖人的ip', `district_id` tinyint(2) NOT NULL COMMENT '所在区域的id', `district_name` varchar(20) NOT NULL COMMENT '行政区名字', `street_id` tinyint(2) NOT NULL COMMENT '所在街道(地标)的id', `street_name` varchar(20) NOT NULL COMMENT '小区名字', `title` varchar(255) NOT NULL COMMENT '帖子的标题', `description` text NOT NULL COMMENT '帖子详情描述', `post_at` int(11) NOT NULL COMMENT '用户发帖时间,数据创建的时间,使用整型存储', `refresh_at` int(11) NOT NULL COMMENT '帖子被修改的时间,整型存储', `show_time` int(11) NOT NULL COMMENT '帖子显示时间', `age_max` int(11) NOT NULL DEFAULT '0' COMMENT '招聘最小年龄', `age_min` int(11) NOT NULL DEFAULT '0' COMMENT '招聘最大年龄', `post_refresh_at` int(11) NOT NULL COMMENT '刷新时间', PRIMARY KEY (`id`), UNIQUE KEY `idx_puid` (`puid`), KEY `user_id_index` (`user_id`), KEY `post_at_index` (`post_at`), KEY `refresh_at_index` (`refresh_at`), KEY `show_time_index` (`show_time`)) ENGINE=InnoDB AUTO_INCREMENT=55295 DEFAULT CHARSET=utf8 COMMENT='招聘帖子表'
- MYSQL WEB数据库的设计归范-1命名规范
- 【oschina】mysql web数据库的设计归范-1命名规范
- Mysql 数据库规范 表设计 命名规范
- MySQL数据库命名规范
- SQL数据库设计的命名规范
- Web UI设计命名规范
- Web UI 设计命名规范
- Web UI 设计命名规范
- Web UI 设计命名规范
- MySQL命名、设计及使用规范--------来自标点符的《MySQL命名、设计及使用规范》
- 数据库设计命名参考规范
- 数据库设计中的命名规范
- 数据库设计中的命名规范
- 数据库设计中的命名规范
- 【Mysql】命名、设计、书写规范
- 数据库的命名规范
- Web UI 设计(网页设计)命名规范
- Web UI 设计(网页设计)命名规范
- activemq中queue的简单负载示例
- hibernate中的关联关系小结
- Levenberg-Marquardt(列文伯格-马夸尔特)算法
- 如何在虚拟机中安装SEEDUbuntu9_August_2010.tar.gz
- 汉化修改so文件心得篇二(带偏移修改)
- MYSQL WEB数据库的设计归范-1命名规范
- hdu2094——产生冠军
- 让你垂涎的计算机视觉 Matlab 源码~ 希望对你有用~
- 如何使用运行perl程序
- sgu135:Drawing Lines
- pat 1015 Reversible Primes
- 初识SQL数据库
- java使用jetty作为内嵌服务器启动项目
- CubieTruck的Cubian X1中安装配置vnc