热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

MicrosoftSQLServer数据库存档

本文将为大家讲述如何注释自己的SQLServer,这些原理适用于所有的SQLServer版本,虽然SQLServer2005及更高的版本包含了一些增强数据存档功能的巧妙设置。本文大部分涉及的原理也同样适用于其他的关系数据库,如Oracle、MySQL、MicrosoftAccess和PostgreSQ

  本文将为大家讲述如何注释自己的SQL Server,这些原理适用于所有的SQL Server版本,虽然SQL Server 2005及更高的版本包含了一些增强数据存档功能的巧妙设置。本文大部分涉及的原理也同样适用于其他的关系数据库,如Oracle、 MySQL、Microsoft Access和PostgreSQL等。

  数据库命名规范

  如果你是从头开始设计一个数据库,那遵循逻辑数据实体命名规范将是明智之举。下面为您提供在新数据库中给对象命名时会用到的一些建议。

  一般命名规范

  如果可以,数据库名称应当只使用文字和数据这两种字符。避免使用连字号,因为之后会给编写某些T-SQL查询命令造成困难。

  如果可能,尽量避免在数据库实例中使用空格符,特别是为表和列命名时。虽然如果用方括号括起来的话,T-SQL还是可以辨认这些实体,不过在某些情况下也有可能导致混淆和代码错误。此外,还要尽量避免在表名和列名中使用T-SQL的保留词,例如month、year和user等。

  表命名规范

  当我们为表命名时,应当使用与该表存储的数据相关的名称。例如,存储企业员工数据的表可以命名为employees,注意这里使用的是名词的复数形式,因为一个表里很可能存储一个以上员工信息。

  有一些程序开发人员会为表名附上像t_这样的前缀。如果这些表是引用了应用程序的源代码而来,那么这些前缀就非常有用,这样能够使软件开发团队一眼就看出来这是一个表,而不是一个视图或其他被引用的实体。

  给表名附上与其功能相关的前缀(如StudentID_)可以帮助我们把表分门别类。SQL Server 2005引入了模式的概念,可以为表分类。例如StudentsEnrollments数据库中包含了StudentResources模式,而相关的表(StudentID、StudentAddress、StudentCredits等)就会在SQL Server 管理工作室表列中的这个模式下全部列出。

  外键命名规范

  如果能在一个数据表中识别出哪些是外键(foreign keys)会非常有用,所以在为外键命名的时候,可以添加一些类似于fk_的前缀,这样可以更直接的从表的字段中看出表的关系。

  存储过程命名规范

  根据用途来为存储过程命名是很有意义的。例如,GetUserID、InsertDateOfBirth、UpdateEnrollInfo等等,这样对于存储过程的用途就一目了然了。

  有时候,可以适当添加后缀来表示存储过程的输入参数。例如GetUserIDByUserNameAndPassword这名称表示该存储过程会通过一个用户名和密码作为输入参数返回用户ID。这可以用来区分功能相似但参数设置不同的存储过程,还可以添加其他相关的存储过程,例如GetUserIDByGUID和GetUserIDByApplicantID。这种命名规范的缺陷就是存储过程的名字会变得很长。

  一些开发人员会用特定的标签来为所有的存储程序添加前缀。其中很流行的做法是为存储程序名添加sp_前缀。不过,这里并不推荐这种做法,原因有二。首先,这对数据库性能有轻微的影响,因为SQL Server会先在主数据库中查找所有带有这个前缀的存储过程,虽然这会性能的影响很小,不过在高级和企业系统中,影响可能会放大。其次,由于微软在设计的时候也为系统的存储过程使用了这个前缀,所以始终存在着这种可能,那就是你为自己的存储过程起的名字和某个系统存储过程的名字相同。而且,SQL Server未来发布的版本中可能会引入一个新的系统存储过程,而这个过程与你现有的用户存储过程的名字相同。

  如果你实在想要为自己的存储过程添加前缀,那么建议你使用usp_或sproc_这样的前缀。同样的,你可以为某个函数名加上func_这样的前缀,特别是在从应用程序源代码调用存储程序的时候非常有用,因为这让软件开发团队清楚的了解到这是在调用一个存储过程。

  SQL存储过程的存档

  千万不要忘记把存储过程和函数的T-SQL代码存档。由于简单的查询代码应该是自注释的,而存档将对大型的查询代码非常有用。而存储过程的标准化标头也非常有用,至少能够说明该存储过程的功能。如果手头上没有任何源控制系统,在标头中包括日志变化的内容还能够帮助我们追踪变化的发生。

  某存储过程的标头示例如下:

以下是引用片段:
  /*
  Description: Gets a user's UserID
  Author: Brett Burridge
  Create Date: 11/11/2007
  Param: @UserName = User's login name
  Param: @Password = User's password
  Return: UserID of the user
  Modified Date: 01/01/2008
  Modification: Added to check to see if their account has been suspended
  */

  注意为存储过程添加注释并不会对性能造成任何影响。

  数据库对象描述

  能够对数据库对象进行描述在某种程度上意味着能够创建自我存档的数据库。

  微软早在SQL Server 7.0就引入了一个有用的功能,就是通过表设计窗口为某个表添加描述(Description)。SQL Server 2000通过引入扩展属性(extended properties)加强了这一功能。然而,SQL Server 2000的企业管理器限制了允许属性编辑的功能。不过在 SQL Server 2005中的SQL Server管理工作室GUI允许对扩展属性进行编辑。数据库中的大部分对象(如表、列、视图、函数、存储过程和数据库本身)都具有可编辑的扩展属性。默认状态下,只有单一的扩展属性MS_Description。而且,虽然你可以利用MS_Description扩展属性来为对象添加描述,但如果没有第三方加载工具,就算添加了,用处也并不大。


推荐阅读
  • 推荐一个ASP的内容管理框架(ASP Nuke)的优势和适用场景
    本文推荐了一个ASP的内容管理框架ASP Nuke,并介绍了其主要功能和特点。ASP Nuke支持文章新闻管理、投票、论坛等主要内容,并可以自定义模块。最新版本为0.8,虽然目前仍处于Alpha状态,但作者表示会继续更新完善。文章还分析了使用ASP的原因,包括ASP相对较小、易于部署和较简单等优势,适用于建立门户、网站的组织和小公司等场景。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了如何在MySQL中将零值替换为先前的非零值的方法,包括使用内联查询和更新查询。同时还提供了选择正确值的方法。 ... [详细]
  • 在数据分析工作中,我们通常会遇到这样的问题,一个业务部门由若干业务组构成,需要筛选出每个业务组里业绩前N名的业务员。这其实是一个分组排序的 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
author-avatar
yangerzhou
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有