数据库规范常用说明书

1.建表规约

  1. 【强制】表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是tinyint(1)

    ( 1表示是,0表示否)。

    说明:任何字段如果为非负数,必须是无符号。

    正例:表达逻辑删除的字段名is_deleted,1 表示删除,0 表示未删除。

  2. 【强制】表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。

    说明:MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写。因此,数据库名、表名、字段名,都不允许出现任何大写字母,避免节外生枝。

    正例:aliyun_admin,rdc_config,level3_name 反例:AliyunAdmin,rdcConfig,level_3_name

  3. 【强制】表名不使用复数名词。

    说明:表名应该仅仅表示表里面的实体内容,不应该表示实体数量,对应于模型类名也是单数形式,符合表达习惯。

  4. 【强制】禁用保留字,如desc、range、match、delayed等,请参考MySQL官方保留字。 官方文档链接:MySQL :: MySQL 5.7 Reference Manual :: 9.3 Keywords and Reserved Words

  5. 【强制】主键索引名为pk字段名;唯一索引名为uk字段名;普通索引名则为idx_字段名。

    说明:pk_ 即primary key;uk_ 即 unique key;idx_ 即index的简称。

  6. 【强制】小数类型为decimal,禁止使用float和double。

    说明:float和double在存储的时候,存在精度损失的问题,很可能在值的比较时,得到不正确的结果。如果存储的数据范围超过decimal的范围,建议将数据拆成整数和小数分开存储。

  7. 【强制】如果存储的字符串长度几乎相等,使用char定长字符串类型。

  8. 【强制】varchar是可变长字符串,不预先分配存储空间,长度不要超过5000,如果存储长度大于此值,定义字段类型为text,独立出来一张表,用主键来对应,避免影响其它字段索引效率。

  9. 【强制】表必备字段:id

  10. 【强制】表中每个字段都应当解释该字段的含义

    说明:在建表初期或修改字段后都应当说明字段的意思,以便后期维护方便,如下

    comment_num int(11) DEFAULT '0' COMMENT '评论数'

  11. 【推荐】表的命名最好是加上“业务名称_表的作用”。

    正例:alipay_task / force_project / trade_config

  12. 【推荐】库名与应用名称尽量一致。

  13. 【推荐】如果修改字段含义或对字段表示的状态追加时,需要及时更新字段注释。

  14. 【推荐】字段允许适当冗余,以提高查询性能,但必须考虑数据一致。冗余字段应遵循:

    1) 不是频繁修改的字段。

    2) 不是varchar超长字段,更不能是text字段。

    正例:商品类目名称使用频率高,字段长度短,名称基本一成不变,可在相关联的表中冗余存储类目名称,避免关联查询。

  15. 【推荐】单表行数超过500万行或者单表容量超过2GB,才推荐进行分库分表。

    说明:如果预计三年后的数据量根本达不到这个级别,请不要在创建表时就分库分表。

  16. 【参考】合适的字符存储长度,不但节约数据库表空间、节约索引存储,更重要的是提升检索速度。

2 索引规约

  1. 【强制】业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引。

    说明:不要以为唯一索引影响了insert速度,这个速度损耗可以忽略,但提高查找速度是明显的;另外,即使在应用层做了非常完善的校验控制,只要没有唯一索引,根据墨菲定律,必然有脏数据产生。

  2. 【强制】超过三个表禁止join。需要join的字段,数据类型必须绝对一致;多表关联查询时,保证被关联的字段需要有索引。

    说明:即使双表join也要注意表索引、SQL性能。

  3. 【强制】在varchar字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,根据实际文本区分度决定索引长度即可。

    说明:索引的长度与区分度是一对矛盾体,一般对字符串类型数据,长度为20的索引,区分度会高达90%以上,可以使用count(distinct left(列名, 索引长度))/count(*)的区分度来确定。

  4. 【强制】页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决。

    说明:索引文件具有B-Tree的最左前缀匹配特性,如果左边的值未确定,那么无法使用此索引。

  5. 【推荐】如果有order by的场景,请注意利用索引的有序性。order by 最后的字段是组合索引的一部分,并且放在索引组合顺序的最后,避免出现file_sort的情况,影响查询性能。

    正例:where a=? and b=? order by c; 索引:a_b_c

    反例:索引中有范围查找,那么索引有序性无法利用,如:WHERE a>10 ORDER BY b; 索引 a_b无法排序。

  6. 【推荐】利用覆盖索引来进行查询操作,避免回表。

    说明:如果一本书需要知道第11章是什么标题,会翻开第11章对应的那一页吗?目录浏览一下就好,这个目录就是起到覆盖索引的作用。

    正例:能够建立索引的种类:主键索引、唯一索引、普通索引,而覆盖索引是一种查询的一种效果,用explain的结果,extra列会出现:using index。

  7. 【推荐】利用延迟关联或者子查询优化超多分页场景。

    说明:MySQL并不是跳过offset行,而是取offset+N行,然后返回放弃前offset行,返回 N行,那当offset特别大的时候,效率就非常的低下,要么控制返回的总页数,要么对超过特定阈值的页数进行SQL改写。

    正例:先快速定位需要获取的id段,然后再关联:

SELECT a.* FROM 表1 a, (select id from 表1 where 条件 LIMIT 100000,20 ) b where a.id=b.id

  1. 【推荐】 SQL性能优化的目标:至少要达到 range 级别,要求是ref级别,如果可以是consts 最好。说明:

    1) consts 单表中最多只有一个匹配行(主键或者唯一索引),在优化阶段即可读取到数据。

    2) ref 指的是使用普通的索引(normal index)。

    3) range 对索引进行范围检索。

    反例:explain表的结果,type=index,索引物理文件全扫描,速度非常慢,这个index级别比较range还低,与全表扫描是小巫见大巫。

  2. 【推荐】建组合索引的时候,区分度最高的在最左边。

    正例:如果where a=? and b=? ,a列的几乎接近于唯一值,那么只需要单建idx_a索引即可。

    说明:存在非等号和等号混合判断条件时,在建索引时,请把等号条件的列前置。如:where a>?

    and b=? 那么即使a的区分度更高,也必须把b放在索引的最前列。

  3. 【推荐】防止因字段类型不同造成的隐式转换,导致索引失效。

  4. 【参考】创建索引时避免有如下极端误解:

    1) 宁滥勿缺。认为一个查询就需要建一个索引。

    2) 宁缺勿滥。认为索引会消耗空间、严重拖慢更新和新增速度。

    3) 抵制唯一索引。认为业务的唯一性一律需要在应用层通过“先查后插”方式解决。

                                                      参考阿里开发规范

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库原理及应用》课程设计指导书 2008 级计算机科学与技术专业 第 1 页 共 20 页 计算机科学与技术专业 数据库原理及应用 课 程 设 计 教学实验指导书 《数据库原理及应用》课程设计指导书 2008 级计算机科学与技术专业 第 2 页 共 20 页 《数据库原理及应用》课程设计教学指导 一.设计目的及要求 本课程是为了配合数据库原理及应用课程开设的,是将数据库理论知识转化为实践能力 的重要环节。其主要目的是:通过设计操作,加深对数据库系统理论知识的理解;通过使用 具体的 DBMS,了解一种实际的数据库管理系统并掌握其操作技术。重点掌握如下环节—— 概念结构设计与逻辑结构设计;熟练的使用 SQL 语言实现数据库的建立、应用和维护。 要求如下 1.要充分认识课程设计对培养自己的重要性,认真做好设计前的各项准备工作。 2.既要虚心接受老师的指导,又要充分发挥主观能动性。结合课题,独立思考,努力钻 研,勤于实践,勇于创新。 3.独立按时完成规定的工作任务,不得弄虚作假,不准抄袭他人内容,否则成绩以不及 格计。 4. 学生如有事不能上课要履行正常的请假手续, 并且请假时间原则上不允许超过课程设 计时间的三分之一。课程设计期间,无故缺席按旷课处理;缺席时间达四分之一以上者(按 照缺勤次数/考核次数比值计算) ,其成绩按不及格处理。 5.在设计过程中,要严格要求自己,树立严肃、严密、严谨的科学态度,必须按时、按 质、按量完成课程设计。 二.适用专业 适用计算机科学与技术专业。 三.课程设计的一般步骤 本课程设计分五个阶段: 1)选题与搜集资料:选择课程设计题目,进行系统调查,搜集资料。 2)分析与设计:根据搜集的资料,进行功能与数据分析,并进行数据库、系统功能等 设计。 3)程序设计:在具体的 DBMS 环境下,创建数据库、建立表及必要的其它部分(如视 图、存储过程、触发器等) ;运用掌握的语言,编程序,实现所设计的模块功能(可选) 。 4)调试与测试:自行调试程序,成员交叉测试程序,并记录测试情况。 5)验收与评分:指导教师对每个小组的开发的系统,及每个成员开发的模块进行综合验 收,结合设计报告,根据课程设计成绩的评定方法,评出成绩。 四.本课程设计内容与要求 掌握数据库的设计的每个步骤,以及提交各步骤所需图表和文档。通过使用目前流行的 DBMS(首选 SQL SERVER 2005,不得使用 ACCESS) ,建立所设计的数据库,并在此基础 上实现数据库查询、连接等操作和触发器、存储过程等对象设计。 1.应用系统需求分析 学生自选由指导教师给定的多个课程设计的题目,进行应用系统需求分析工作,绘制操 作流程图、DFD、DD 图表以及书相关的文字说明。 2.概念结构设计 绘制详细的 E-R 图,由指导教师师检查数据结构是否合理。 3.逻辑结构设计 《数据库原理及应用》课程设计指导书 2008 级计算机科学与技术专业 第 3 页 共 20 页 将 E-R 图转换成等价的关系模式;按需求对关系模式进行规范化(建议至少满足第三范 式要求) ;对规范化后的模式进行评价,调整模式,使其满足性能、存储等方面要求;根据局 部应用需要设计外模式。 4.物理结构设计 选定实施环境,存取方法(如索引)等。 5.数据实施和维护 用 DBMS 建立数据库结构,将初始化数据及部分测试数据装入数据库,实现各种查询、 链接应用程序,设计数据库中触发器、存储器等对象,并能对数据库做简单的维护操作; 6.课程设计总结 总结课程设计的过程、体会及建议。 7.答辩 进行课程设计答辩,主要了解学生们通过数据库课程设计,对数据库基本知识 的了解程度。 五.上机任务 1.数据库、基本表的建立和修改。 2.数据加载: 用手工录入或导入等方法实现基本表中的数据加载。 3.单表查询以及多表查询:在建立的基本表中使用 select 基本格式和常用数据库函数; 设计合适的视图,实现多表间查询。 4.触发器:设计若干触发器,实现表间关联字段修改时的完整性问题。 5.存储过程:设计若干多表查询的存储过程,根据需要可以创建带参数的存储过程,并 用语句调用,要求有一定的输出格式。根据个人能力,可以选用 VB、VB、C#、Java 等高级 编程语言设计界面(如果能够确认该内容为学生自做,可在程序设计部分获得加分,否则不 能加分) 。 六.课程设计进度安排(时间为两周,10 天) 时间 内容 学生上机地点 辅导答疑地点 联系人及电话 1~2Day 指导教师指导 DBMS 应用与选题指导 数据库教研室 3~4Day 需求分析及概念结构 设计 图书馆阅览室 实验室 数据库教研室 5Day 逻辑结构设计 实验室 数据库教研室 6Day 物理结构设计 实验室 实验室 7~8Day 数据库实施、调
人事管理是现代企业管理工作不可缺少的一部分,是推动企业走向科学化、规范化的必要条件。员工是企业生存的主要元素,员工的增减、变动将直接影响到企业的整体运作。企业员工越多、分工越细、联系越密,所要做的统计工作就越多,人事管理的难度就越大。随着企业的不断壮大,自动化的企业人事管理系统就显得非常必要。 一、任务概述 1.目标 根据企业对人事管理的要求,制定企业人事管理系统目标如下: a.操作简单方便、界面简洁美观。 b.在查看员工信息时,可以对当前员工的家庭情况和培训情况进行添加、修改、删除操作。 c.方便快捷的全方位数据查询。 d.按照指定的条件对员工进行统计。 e.可以将员工信息以表格的形式插入到Word文档中。 f.实现数据库的备份、还原及清空操作。 g.由于该系统的使用对象较多,要有较好的权限管理。 h.能够在当前运行的系统中重新进行登录。 i.系统运行稳定、安全可靠。 2.运行环境 系统开发平台 Microsoft Visual Studio 2005 系统开发语言 C# 数据库管理系统软件 Microsoft SQL Server 2005 运行平台 Windows XP(SP2) Windows 2000(SP4) Windows Server 2003(SP1) 运行环境 Microsoft .NET Framework SDK v2.0 分辨率 最佳效果1024×768像素 3.条件和限制 一个更为完善的企业人事管理系统,应提供更为便捷与强大的信息查询功能,如相应的网络操作及服务,由于开发时间和计算机数量有限,该系统并未提供这一功能。对信息的保护手段仅限于设置用户级别,以及提供数据文件的备份,比较简单,不能防止恶意的破坏,安全性能有待进一步完善。 4.数据库描述 数据库是数据管理的最新技术,是计算机科学的重要分支。近几年来,数据库管理系统已从专用的应用程序包发展成为通用系统软件。 由于数据库具有数据结构化、最低冗余度、较高的程序与数据独立性、易于扩充、易于编制应用程序等优点,较大的信息系统都是建立在数据库设计之上的。 由于用到的数据表格多,另外考虑到实际情况,企业人事基本信息的变动,还有员工信息的多少的变化,我们选用SQL Server作为数据库开发,而不用Access,主要是因为 Access 存放的记录,在实际运用中不适合此系统;而 SQL Server 是一种常用的关系数据库,能存放和读取大量的数据,管理众多并发的用户,故选用SQL Server数据库。 二、二层的细化数据流图 1.基础信息管理数据流图 ………………
数据库设计规范化的五个要求 数据库逻辑设计是优化关系数据库的核心。而数据库设计的规范化则是这个核心的核 心。一个规范化的逻辑数据库,可以为数据库管理员优化数据库和应用程序性能打下坚 实的基础。相反,若逻辑数据库设计不规范,则会损害整个数据库,包括应用程序的性 能。   通常情况下,可以从两个方面来判断数据库是否设计的比较规范。一是看看是否拥 有大量的窄表,二是宽表的数量是否足够的少。若符合这两个条件,则可以说明这个数 据库的规范化水平还是比较高的。当然这是两个泛泛而谈的指标。为了达到数据库设计 规范化的要求,一般来说,需要符合以下五个要求。 要求一:表中应该避免可为空的列   虽然表中允许空列,但是,空字段是一种比较特殊的数据类型。数据库在处理的时 候,需要进行特殊的处理。如此的话,就会增加数据库处理记录的复杂性。当表中有比 较多的空字段时,在同等条件下,数据库处理的性能会降低许多。   所以,虽然在数据库表设计的时候,允许表中具有空字段,但是,我们应该尽量避 免。若确实需要的话,我们可以通过一些折中的方式,来处理这些空字段,让其对数据 库性能的影响降低到最少。 一是通过设置默认值的形式,来避免空字段的产生。 二是若一张表中,允许为空的列比较多,接近表全部列数的三分之一。而且,这些列 在大部分情况下,都是可有可无的。若数据库管理员遇到这种情况,建议另外建立一张 副表,以保存这些列。然后通过关键字把主表跟这张副表关联起来。将数据存储在两个 独立的表中使得主表的设计更为简单,同时也能够满足存储空值信息的需要。 要求二:表不应该有重复的值或者列   如进销存管理中,还需要对客户的联系人进行管理。而一个客户的联系人可能有多 个,为了解决这个问题,有多种实现方式。若设计不合理的话在,则会导致重复的值或 者列。我们可以这么设计,把客户信息、联系人都放入同一张表中。为了解决多个联系 人的问题,可以设置第一联系人、第一联系人电话、第二联系人、第二联系人电话等等 。若还有第三联系人、第四联系人等等,则往往还需要加入更多的字段。   可是这么设计的话,会产生一系列的问题。如客户的采购员流动性比较大,在一年 内换了六个采购员。直接修改又不利于追踪。   所以,在数据库设计的时候要尽量避免这种重复的值或者列的产生。建议,若数据 库管理员遇到这种情况,可以改变一下策略。如把客户联系人另外设置一张表。然后通 过客户ID把供应商信息表跟客户联系人信息表连接起来。也就是说,尽量将重复的值放 置到一张独立的表中进行管理。然后通过视图或者其他手段把这些独立的表联系起来。 要求三:表中记录应该有一个唯一的标识符。   在数据库表设计的时候,数据库管理员应该养成一个好习惯,用一个ID号来唯一的 标识行记录,而不要通过名字、编号等字段来对纪录进行区分。每个表都应该有一个ID 列,任何两个记录都不可以共享同一个ID值。另外,这个ID值最好有数据库来进行自动 管理,而不要把这个任务给前台应用程序。否则的话,很容易产生ID值不统一的情况。  另外,在数据库设计的时候,最好还能够加入行号。ID号是用户不能够维护的。但是 ,行号用户就可以维护。这是在实际应用程序设计中对ID列的一个有效补充。 要求四:数据库对象要有统一的前缀名。   一个比较复杂的应用系统,其对应的数据库表往往以千计。若让数据库管理员看到 对象名就了解这个数据库对象所起的作用,恐怕会比较困难。而且在数据库对象引用的 时候,数据库管理员也会为不能迅速找到所需要的数据库对象而头疼。   建议:在开发数据库之前,最好能够花一定的时间,去制定一个数据库对象的前缀 命名规范。最常用的是根据前台应用程序的模块来定义后台数据库对象前缀名。需要注 意的是,这个命名规范应该在数据库管理员与前台应用程序开发者之间达成共识,并且 严格按照这个命名规范来定义对象名。   其次,表、视图、函数等最好也有统一的前缀。如视图可以用V为前缀,而函数则可 以利用F为前缀。如此数据库管理员无论是在日常管理还是对象引用的时候,都能够在最 短的时间内找到自己所需要的对象。 要求五:尽量只存储单一实体类型的数据。   实体类型跟数据类型不是一回事,要注意区分。如现在有一个图书馆里系统,有图 书基本信息、作者信息两个实体对象。若用户要把这两个实体对象信息放在同一张表中 也是可以的。如可以把表设计成图书名字、图书作者等等。可是如此设计的话,会给后 续的维护带来不少的麻烦。   如当后续有图书出版时,则需要为每次出版的图书增加作者信息,这无疑会增加额 外的存储空间,也会增加记录的长度。而且若作者的情况有所改变,如住址改变了以后 ,则还需要去更改每本书的记录。同时,若这个作者的图书从数据库中全部删除之后, 这个作者的信息也就荡然无存了。很明显,这不符合数据库

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值