mysql及php命名规范
一.mysql命名规范
1.设计原则
1) 标准化和规范化
数据的标准化有助于消除数据库中的数据冗余。标准化有好几种形式,但 Third Normal Form(3NF)通常被认为在性能、扩展性和数据完整性方面达到了最好平衡。简单来说,遵守3NF 标准的数据库的表设计原 则是:“One Fact in One Place”即某个表只包括其本身基本的属性,当不是它们本身所具有的属性时需进行分解。表之间的关系通过外键 相连接。它具有以下特点:有一组表专门存放通过键连接起来的关联数据。
举例:某个存放客户及其有关定单的3NF 数据库就可能有两个 表:Customer和Order。Order表不包含定单关联客户的任何信息,但表内会存放一个键值,该键指向Customer表里包含该客户信息的那 一行。
事实上,为了效率的缘故,对表不进行标准化有时也是必要的。
2) 数据驱动
采用数据驱动而非硬编码的方式,许多策略变更和 维护都会方便得多,大大增强系统的灵活性和扩展性。
举例,假如用户界面要访问外部数据源(文件、XML 文档、其他数据库等),不妨把相应的连接 和路径信息存储在用户界面支持表里。还有,如果用户界面执行工作流之类的任务(发送邮件、打印信笺、修改记录状态等),那么产生工作流的数据也可以存放在 数据库里。角色权限管理也可以通过数据驱动来完成。事实上,如果过程是数据驱动的,你就可以把相当大的责任推给用户,由用户来维护自己的工作流过程。
3) 考 虑各种变化
在设计数据库的时候考虑到哪些数据字段将来可能会发生变更。
举例,姓氏就是如此(注意是西方人的姓氏,比如女性结婚后从夫姓 等)。所以,在建立系统存储客户信息时,在单独的一个数据表里存储姓氏字段,而且还附加起始日和终止日等字段,这样就可以跟踪这一数据条目的变化。
2. 数据库涉及字符规范
采用26个英文字母(区分大小写)和0-9这十个自然数,加上下划线'_'组成,共63个字符.不能出现其他字符(注 释除外).
注意事项:
1) 以上命名都不得超过30个字符的系统限制.变量名的长度限制为29(不包括标识字符@).
2) 数据 对象、变量的命名都采用英文字符,禁止使用中文命名.绝对不要在对象名的字符之间留空格.
3) 小心保留词,要保证你的字段名没有和保留词、数据 库系统或者常用访问方法冲突
5) 保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性.假如数据类型在一个表里是整 数,那在另一个表里可就别变成字符型了.
3.数据库命名规范
数据库,数据表一律使用前缀
正式数 据库名使用小写英文以及下划线组成,尽量说明是那个应用或者系统在使用的.比如:
web_19floor_net
web_car
备 份数据库名使用正式库名加上备份时间组成,如:
web_19floor_net_20070403
web_car_20070403
4. 数据库表命名规范
数据表名使用小写英文以及下划线组成,尽量说明是那个应用或者系统在使用的.
相关应用的数据表使用同一前缀,如 论坛的表使用cdb_前缀,博客的数据表使用supe_前缀,前缀名称一般不超过5字
比如:
web_user
web_group
supe_userspace
备 份数据表名使用正式表名加上备份时间组成,如:
web_user_20070403
web_group_20070403
supe_userspace_20070403
5. 字段命名规范
字段名称使用单词组合完成,首字母小写,后面单词的首字母大写,最好是带表名前缀.
如 web_user 表的字 段:
userId
userName
userPassword
表与表之间的相关联字段要用统一名称,
如 web_user 表 里面的 userId 和 web_group 表里面的 userId 相对应
6.字段类型规范
规则:用尽量少的存储空间来存 数一个字段的数据.
比如能用int的就不用char或者varchar
能用tinyint的就不用int
能用 varchar(20)的就不用varchar(255)
时间戳字段尽量用int型,如created:表示从 '1970-01-01 08:00:00'开始的int秒数,采用英文单词的过去式;gmtCreated:表示datetime类型的时间,即形如 '1980-01-01 00:00:00'的时间串,Java中对应的类型为Timestamp
7.数据库设计文档规范
所 有数据库设计要写成文档,文档以模块化形式表达.大致格式如下:
'-------------------------------------------
' 表 名: web_user
' 作者: Aeolus(傻鱼)
' 日期: 2007-04-11
' 版 本: 1.0
' 描述: 保存用户资料
' 具体内容:
' UserID int,自动增量 用户 代码
' UserName char(12) 用户名字
' ......
'--------------------------------------------
8. 索引使用原则:
1) 逻辑主键使用唯一的成组索引,对系统键(作为存储过程)采用唯一的非成组索引,对任何外键列采用非成组索引.考虑数 据库的空间有多大,表如何进行访问,还有这些访问是否主要用作读写.
2) 大多数数据库都索引自动创建的主键字段,但是可别忘了索引外键,它们也 是经常使用的键,比如运行查询显示主表和所有关联表的某条记录就用得上.
3) 不要索引blob/text等字段,不要索引大型字段(有很多字 符),这样作会让索引占用太多的存储空间.
4) 不要索引常用的小型表
不要为小型数据表设置任何键,假如它们经常有插入和删除操作就更别 这样作了.对这些插入和删除操作的索引维护可能比扫描表空间消耗更多的时间.
9.sql语句规范
所有sql关键词全部大 写,比如SELECT,UPDATE,FROM,ORDER,BY等,所有的表名和库名都要用``包含
如:
SELECT COUNT(*) FROM `cdb_members` WHERE `userName` = 'aeolus';
10.其他设计技巧
1) 避免使用触发器
触发器的功能通常可以用其他方式实现.在调试程序时触发器可能成为干扰.假如你确实需要采用触发 器,你最好集中对它文档化.
2) 使用常用英语(或者其他任何语言)而不要使用编码或者拼音首字母缩写
在创建下拉菜单、列表、报表时最好 按照英语名排序.假如需要编码或者拼音首字母缩写,可以在旁边附上用户知道的英语.
3) 保存常用信息
让一个表专门存放一般数据库信息非 常有用.在这个表里存放数据库当前版本、最近检查/修复(对Access)、关联设计文档的名称、客户等信息.这样可以实现一种简单机制跟踪数据库,当客 户抱怨他们的数据库没有达到希望的要求而与你联系时,这样做对非客户机/服务器环境特别有用.
4) 包含版本机制
在数据库中引入版本控制 机制来确定使用中的数据库的版本.时间一长,用户的需求总是会改变的.最终可能会要求修改数据库结构.把版本信息直接存放到数据库中更为方便.
5) 编 制文档
对所有的快捷方式、命名规范、限制和函数都要编制文档.
采用给表、列、触发器等加注释的数据库工具.对开发、支持和跟踪修改非常有 用.
对数据库文档化,或者在数据库自身的内部或者单独建立文档.这样,当过了一年多时间后再回过头来做第2 个版本,犯错的机会将大大减少。
6) 测 试、测试、反复测试
建立或者修订数据库之后,必须用用户新输入的数据测试数据字段.最重要的是,让用户进行测试并且同用户一道保证选择的数据类型 满足商业要求.测试需要在把新数据库投入实际服务之前完成。
7) 检查设计
在开发期间检查数据库设计的常用技术是通过其所支持的应用程序 原型检查数据库.换句话说,针对每一种最终表达数据的原型应用,保证你检查了数据模型并且查看如何取出数据。
二.php命名规则
就一般约定而言,类、函数和变量的名字应该是能够让代码阅读者能够容易地知道这些代码的作用,应该避免使用凌磨两可的命名。
1.类命名
使用大写字母作为词的分割,其他的字母均使用小写。
名字的首字母使用大写。
不要使用下划线('_')。
如:Name、SuperMan、BigClassObject。
2.类属性命名
属性命名应该以字符‘m’为前缀。
前缀‘m’后采用与类命名一致的规则。
‘m’总是在名字的开头起修饰作用,就像以‘r’开头表示引用一样。
如:mValue、mLongString等
3.方法的命名
方法的作用都是执行一个动作,达到一个目的。所以名称应该说明方法是做什么的。一般名称的前缀都是有第一规律的,如is(判断)、get(得到),set(设置)。
方法的命名第一个单词的首字母小写,其后单词的首字母大写。。如:
class StartStudy{ //设置类
$mLessonOne = ""; //设置类属性
$mLessonTwo = ""; //设置类属性
function getLessonOne(){ //定义方法,得到属性mLessonOne的值
...
}
}
4.方法中参数命名
第一个字符使用小写字母。
在首字符后的所有字符都按照类命名规则首字符大写。
如:
class EchoAnyWord{
function echoWord($firstWord,$secondWord){
...
}
}
5.引用变量
引用变量要带有‘r’前缀。如:
class Example{
$mExam = "";
funciton setExam(&$rExam){
...
}
function getExam(){
...
}
}
6.变量命名
所有字母都使用小写。
使用‘_’作为每个词的分界。
如:$msg_error、$chk_pwd等。
临时变量通常被取名为i,j,k,m和n,它们一般用于整型;c,d,e,s 它们一般用于字符型。
实例变量前面需要一个下划线, 首单次小写,其余单词首字母大写。
7.全局变量
全局变量应该带有前缀‘g’。如:global $gTest。
8.常量、全局常量
常量、全局常量,应该全部使用大写字母,单词之间用‘_’来分割。如
define('DEFAULT_NUM_AVE',90);
define('DEFAULT_NUM_SUM',500);
9.静态变量
静态变量应该带有前缀‘s’。如:
state $sStatus = 1;
10.函数命名
所有的名称都使用小写字母,多个单词使用‘_’来分割。如:
function this_good_idear(){
...
}
以上的各种命名规则,可以组合一起来使用,如:
class OtherExample{
$msValue = ""; //该参数既是类属性,又是静态变量
}
就一般约定而言,类、函数和变量的名字应该是能够让代码阅读者能够容易地知道这些代码的作用,应该避免使用凌磨两可的命名。
1. 类命名
- 使用大写字母作为词的分割,其他的字母均使用小写。
- 名字的首字母使用大写。
- 不要使用下划线('_')。
- 如:Name、SuperMan、BigClassObject。
2. 类属性命名
- 属性命名应该以字符‘m’为前缀。
- 前缀‘m’后采用与类命名一致的规则。
- ‘m’总是在名字的开头起修饰作用,就像以‘r’开头表示引用一样。
- 如:mValue、mLongString等
3. 方法的命名
- 方法的作用都是执行一个动作,达到一个目的。所以名称应该说明方法是做什么的。一般名称的前缀都是有第一规律的,如is(判断)、get(得到),set(设置)。
- 方法的命名第一个单词的首字母小写,其后单词的首字母大写。。如:
|
1
2
3
4
5
6
7
|
class StartStudy{ //设置类 $mLessonOne = ""; //设置类属性 $mLessonTwo = ""; //设置类属性 function getLessonOne(){ //定义方法,得到属性mLessonOne的值 ... }} |
4. 方法中参数命名
- 第一个字符使用小写字母。
- 在首字符后的所有字符都按照类命名规则首字符大写。
- 如:
|
1
2
3
4
5
|
class EchoAnyWord{ function echoWord($firstWord,$secondWord){ ... }} |
5. 引用变量
- 引用变量要带有‘r’前缀。如:
|
1
2
3
4
5
6
7
8
9
|
class Example{ $mExam = ""; funciton setExam(&$rExam){ ... } function getExam(){ ... }} |
6. 变量命名
- 所有字母都使用小写。
- 使用‘_’作为每个词的分界。
- 如:$msg_error、$chk_pwd等。
- 临时变量通常被取名为i,j,k,m和n,它们一般用于整型;c,d,e,s 它们一般用于字符型。
- 实例变量前面需要一个下划线, 首单次小写,其余单词首字母大写。
7. 全局变量
- 全局变量应该带有前缀‘g’。如:global $gTest。
8. 常量、全局常量
- 常量、全局常量,应该全部使用大写字母,单词之间用‘_’来分割。如
|
1
2
|
define('DEFAULT_NUM_AVE',90);define('DEFAULT_NUM_SUM',500); |
9. 静态变量
- 静态变量应该带有前缀‘s’。如:
|
1
|
state $sStatus = 1; |
10. 函数命名
- 所有的名称都使用小写字母,多个单词使用‘_’来分割。如:
|
1
2
3
|
function this_good_idear(){ ...} |
以上的各种命名规则,可以组合一起来使用,如:
|
1
2
3
|
class OtherExample{ $msValue = ""; //该参数既是类属性,又是静态变量} |
mysql及php命名规范的更多相关文章
- MySQL大小写敏感问题和命名规范
注:本文大部内容参考自互联网相关文章 1.MySQL大小写敏感规则 MySQL中,一个库会对应一个文件夹,库里的表会则以文件的方式存放在文件夹内,所以,操作系统对大小写的敏感性决定了数据库和表的大小写 ...
- mysql命名规范
1.数据库表命名规范: (1)表名前应该加上前缀,表的前缀一个用系统或模块的英文名称缩写,前缀全部大写或首字母大写,表名中包含的单词首字母大写. (2)数据库表名应该有意义,并且易于理解,最好使用可以 ...
- mysql基本约定与命名规范
一.约定 1.如无特殊需求,所有表使用innodb引擎 2.如无特殊需求,所有主键均为自增类型 3.如无特殊需求,所有字段均为NOT NULL,并给定默认值 4.所有字段均设置备注,枚举字段需要说明每 ...
- MySql数据库细节使用规范
一.基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务.行级锁.并发性能更好.CPU及内存缓存页优化使得资源利用率更高 (2)必须使用UTF8字符集 解读:万国码,无需转码,无乱码风险,节省 ...
- MySQL数据库25条规范解读
一.基础规范 (1)必须使用UTF8字符集 解读:万国码,无需转码,无乱码风险,节省空间(由于移动设备原因最好使用utf8mb4) (2)禁止使用存储过程.视图.触发器.Event 解读:高并发大数据 ...
- 关于redis key命名规范的设计
一.实现目标 简洁,高效,可维护 二.键值设计规约 1 . Redis key命名风格 [推荐]Redis key命名需具有可读性以及可管理性,不该使用含义不清的key以及特别长的key名: [强制] ...
- MySQL 设计与开发规范
MySQL 设计与开发规范 1 目的 本规范的主要目的是希望规范数据库设计与开发,尽量避免由于数据库设计与开发不当而产生的麻烦:同时好的规范,在执行的时候可以培养出好的习惯,好的习惯是软件质量的很好保 ...
- JavaScript var关键字、变量的状态、异常处理、命名规范等介绍
本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...
- Java命名规范
驼峰法则: 将所有字母都小写(包括缩写),然后将单词的第一个字母大写. 每个单词的第一个字母都大写,来得到大驼峰式命名. 除了第一个单词,每个单词的第一个字母都大写,来得到(小)驼峰式命名. 为避免歧 ...
随机推荐
- RHEL7进程管理
进程概念 名称 说明 程序 一组指令的集合 进程 程序的执行就是进程也可以把进程看成一个独立的程序在内存中有其对应的代码空间和数据空间,一个进程所拥有的数据和代码只属于自己进程是资源分配的基本单位,也 ...
- Oracle之自动收集统计信息
一.Oracle 11g 在Oracle的11g版本中提供了统计数据自动收集的功能.在部署安装11g Oracle软件过程中,其中有一个步骤便是提示是否启动这个功能(默认是启用这个功能). 在这里介绍 ...
- 转:Web应用程序项目XX已配置为使用IIS
转:http://www.cnblogs.com/Joetao/articles/2392526.html 今天在看开源项目Umbraco是,出现一个项目加载不了,并报如下错误: Web应用程序项目U ...
- PowerDesign设置列名与表名的大小写规则
因为设计的Model是要用到Oracle 11g的,Oracle 11g的表名和列名默认是大写,在设计模型当中小写转大写一直很苦闹,发现PowerDedign可以直接设置,见下文: 打开Tools-- ...
- 《C程序设计的抽象思维》2.10编程练习(未完)
本文地址:http://www.cnblogs.com/archimedes/p/programming-abstractions-in-c-2.html,转载请注明源地址. 2.按照规定求圆柱的表面 ...
- 【原】xcode5.0升级5.1遇到的clang: error: unknown argument: '-fobj-arc'错误
XCODE5.0升到XCODE5.1后LLVM也从5.0升到5.1,工程报下面的错误了: clang: error: unknown argument: '-fobj-arc' [-Wunused-c ...
- 【转】IOS屏幕旋转与View的transform属性之间的关系,比较底层
iTouch,iPhone,iPad设置都是支持旋转的,如果我们的程序能够根据不同的方向做出不同的布局,体验会更好. 如何设置程序支持旋转呢,通常我们会在程序的info.plist中进行设置Suppo ...
- UnityShader之固定管线命令Combine纹理混合【Shader资料4】
Combine,纹理混合. 我们先看圣典上给的解释. 纹理在基本的顶点光照被计算后被应用.在着色器中通过SetTexture 命令来完成. SetTexture 命令在片面程序被使用时不会生效:这种模 ...
- Web应用程序系统的多用户权限控制设计及实现-栏目模块【8】
前五章均是从整体上讲述了Web应用程序的多用户权限控制实现流程,本章讲述Web权限管理系统的基本模块-栏目模块.栏目模块涉及到的数据表为目录表. 1.1栏目域 为了更规范和方便后期系统的二次开发和维护 ...
- NSDictionary和NSMutableDictionary
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...