SQL Server 设计命名编码规范Word文档下载推荐.docx
- 文档编号:4911514
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:42
- 大小:39.27KB
SQL Server 设计命名编码规范Word文档下载推荐.docx
《SQL Server 设计命名编码规范Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《SQL Server 设计命名编码规范Word文档下载推荐.docx(42页珍藏版)》请在冰点文库上搜索。
在代码出错时大大节省时间
只要在第一次是有个良好的设计
3.开发环境
3.1数据库模型
CA公司的ERwin/SQL是数据建模的一个首选工具.
在开发经常改变的项目时,使用ERwin来生成表(创建/删除),索引,规则,数据类型等数据库对象的脚本,在对项目文件进行修改之前,请确认已经对这些脚本进行过备份.
任何数据库的改变,不管是在开发中还是在产品服务器中,都要用ERwinDiagram中进行相应的修改.如果产品服务器上做出了更改,则一定要对主脚本和ERwindiagram进行相应更新.
3.2Diagrams
使用Visio进行数据diagram,流程图,服务器拓朴和其它diagrams进行设计.文档化系统或者处理流程可以大大有利于团队间的协作.
3.3版本控制
推荐使用VisualSourceSafe(VSS)对NESE数据库对象进行管理.
在任何项目中,都应该有很好的代码更改控制,初始版本文件应该放到VSS中并被注释.所有对这些文件的后继更改都应该放到VSS中管理.
3.4源码目录结构
在项目刚开始时,找到一个所有Team成员都能够访问的共享.按照以下结构初始化VSS目录和数据库子目录:
\CMD包括全系统脚本的脚本文件,如果是一个多数据库的系统,应该有一个可能创建所有数据库的命令文件.
\DBName在系统中的每个数据库应该有自己的目录结构,如下:
\CMD:
用来创建此数据库的脚本文件,并且来更改数据库构架.
\DAT:
用来刷新此数据库的数据文件.
\SP:
用来存储存储过程的脚本
\TBL:
除了下面子目录,这个目录应该包括表的定义脚本,每个表应该有它自己的脚本,此脚本应该包括经表的删除,创建语句,索引,触发器,完整性参照,Check约束,默认值约束等,每个表创建语句应该包括在不同的脚本中,并被把归类到类似于下面的相应的子目录中.注意:
本目录中的脚本和以下子目录的脚本应该命名为它所影响的表名,比如:
表名.sql:
\Check:
为每个表创建独立的Check约束定义脚本,Check约束应该使用altertableaddconstraint来创建,并且每个altertable语句只能包括一个contraint。
\DEFAULT:
为每个表创建单独的Default约束定义脚本。
注意这些是DefaultConstraints,而不是在创建表时的Default。
\FK:
为每个表创建单独的外键约束定义脚本。
\Index:
为每个表创建一个索引定义脚本,并把对应索引定义脚本放进去.
\PK:
为每个表创建单独的主键定义脚本
\TRG:
为每个表创建单独的触发器定义脚本,并把应用到此表上的触发器放进此脚本文件中。
\UDF:
用户自定义函数。
\View:
视图定义脚本。
\DCL:
数据控制语句脚本—主要包括控制所有的数据库对象的Grant和Revoke语句。
\MISC:
这儿用于存放各式各样的其它脚本,例如altertable脚本或者一次更改的脚本,注意,不要放此目录看成是一个包罗各种脚本的容器,只应包括需要放到VSS中,但是又不属于上面所列目录的脚本。
4.物理数据库模型&
字典
E-R图表和数据字典可以让任何使用数据库的人都明确的知道如何从数据库中获得数据。
E-R图对表明表之间关系很有用,而数据字典则说明了每个字段的用途以及任何可能存在的别名
4.1物理数据模型
物理模型图形化的展现数据库的实现,它由逻辑数据模型及底层关系型数据库管理系统来决定,由逻辑模型转变为物理模型包括以下的任务:
为实体和属性创建合理的数据库名字
为每个属性设计数据类型和是否允许为空
定义主键,外键和索引
定义规则和默认值
为优化性能,尽可能使数据库设计规范化,比如遵循1NF(第一范式),2NF(第二范式)和3NF(第三范式)
为加快数据库设计速度,目前有很多数据库辅助工具(CASE工具),如Rational公司的RationalRose,CA公司的Erwin,Sybase公司的PowerDesigner以及Oracle公司的OracleDesigner等。
ERwin主要用来建立数据库的概念模型和物理模型。
它能用图形化的方式,描述出实体、联系及实体的属性。
ERwin支持IDEF1X方法。
通过使用ERwin建模工具自动生成、更改和分析IDEF1X模型,不仅能得到优秀的业务功能和数据需求模型,而且可以实现从IDEF1X模型到数据库物理设计的转变。
ERwin工具绘制的模型对应于逻辑模型和物理模型两种。
在逻辑模型中,IDEF1X工具箱可以方便地用图形化的方式构建和绘制实体联系及实体的属性。
在物理模型中,ERwin可以定义对应的表、列,并可针对各种数据库管理系统自动转换为适当的类型。
设计人员可根据需要选用相应的数据库设计建模工具。
例如需求分析完成之后,设计人员可以使用Erwin画ER图,将ER图转换为关系数据模型,生成数据库结构;
画数据流图,生成应用程序。
ERwin是现在被广泛使用的数据模型设计软件,IDEF1X用来建立信息模型的标准。
物理模型基于逻辑模型,ERwin同时支持逻辑模型和物理模型视图的设计。
同时,ERwin可以产生所有的用来创建数据库的DDL脚本.
4.2IDEF1X方法
下面的关系图描述最常用的IDEF1X表达式协定:
4.3物理数据库数据字典
使用ERwin来对物理数据库数据字典进行维护。
在属性定义编辑器中输入属性定义。
然后你就可以从ERwin中生成报表,把它们放到word文档中,在属性报表中,将包括属性名字,数据类型,Null/NotNull和主/外键选项。
把实体和属性定义放到一个一个文档中是很困难的,所以在不同的报表中创建它们.
4.4性能设计
作为一个常规的规则,在一个具有标识列(identityproperty)的列上定义一个主键。
这使与之存在关系的表有一个窄的行宽,从而使同一数据页中能被存储更多的数据行,因此相同条件下将会有更少的描描操作。
定义聚集主键,这将会使二级索引占用较少空间。
在外键上创建索引。
不要使用过多的索引,要确认你知道哪个索引将被使用。
确认对应表存在统计信息。
同时在数据库中打开AutoGenerateStats和Autocreatestats选项。
在一个只读的数据库中,我们可能需要手动的创建统计信息.
在一个只读的数据库或者是很少被更改的数据库中使用100%的索引填充率。
SELECT语句中,在非事务和特别的完整性要求的上下文中,要使用TableHints――WITHNOLOCK
5.命名协定
5.1数据库命名原则及版本控制
5.1.1数据库命名原则
数据库命名要遵从以下命名原则:
表意性原则:
数据库命名本着表意性原则,即命名应尽量反映存储/action/view/column的数据内容。
长名原则:
很少使用或者不使用缩写,适用于DB命名之外的任一对象
数目最少化原则:
数据库对象应该尽量满足数据最小化原则,也就是数据库数目,存储过程,视图等数量最小化。
5.1.2数据库版本控制
当由于多个版本的应用系统同时存在或者是其它特殊原因而使用完成相似的功能的对象存在同时存在时,使用版本控制:
版本号在对象名的后面加上[_v1]
如:
Up_IM_DailyUsageStatsUpdate_v2
Up_IM_CustomerGetUsingLastName_v2
5.2Server/命名实例的命名
基于Domain命名,DOMAIN的粒度,可分为三级,分别是Server级别,Database级别和表的前缀级别。
此为第一级别。
1.
ONLINEPRODUCTIONSERVER
NEWSQL
NEWSQL2
EHISSQL
WAREHOUSEPRODUCTIONSERVER
S3SQL01
S4SQL01
S7SQL01
S6SQL01
5.3数据库命名
数据库命名应当遵从上面所提及到的协定,包括没有特殊的字符,使用文字数据字式字符……..,项目代码命名不应该同样被数据库使用.数据库名字应该唯一以避免冲突等.以Domain来标识,拆分DATABASE,基于大的逻辑范畴,如operation范畴以及部门类别,另外:
其它与部门相关的DATABASE可以放到相关的SERVER下。
数据库数目最少化原则
数据设置尽可能MERGER原则
perationdatabaseANDDeptlevelDatabasesetuprules
拆分DATABASE,基于大的逻辑范畴,如operation范畴以及部门类别
其它与部门相关的DATABASE可以放到相关的SERVER下。
下面为与OPEARATION相关的DATABASE示例:
如:
下面为与OPEARATION相关的DATABASE:
ItemProfile
Inventory
Codecenter
CustomerProfile
SalesOrder
Accounting
Sevice(RAM)
eCommerce
SupplerChainManagement
DropShip
SerialNumber
WorkFlow
ShippingCarrier
WarehouseManagment
HumanResource
MKT
Pm
Mis
CUSTOMERSVR
ADMIN
ACCOUNTING
2.INTERNALDEPTDATABASESERVER
5.4数据库对象—表,视图,列名,约束,规则,默认值
数据库对象应该被清晰的命名,要确认不存在歧义。
数据库对象的名字应该包括自己尽可能多的信息,并要详细的说明与之相对应的项目文档.选择合适的命名空间是一个很让人困惑的问题(比如我们不能从一个存储过程的命名上看到是哪个项目在使用这个对象),命名名字唯一的在数据库级别标识自己,无论在哪儿使用它,请确保在一个项目中命名方法的一致.在一个小的上下文看来很清晰的对象在一个大的上下文中可能就会丢失他的含义.节省击键次数永远不能用来作选择名字的标准.
下面供述了数据库对象的命名协定,所有的数据库对象命名都应该遵循下面协定.
如果不是长度限制,缩写应该被避免.当使用缩写时应该遵从下面的缩写规范的规则.缩写应该在项目范围内保持一致并被存档.
不要使用特殊的字符;
对文字数字式字符加以限制.
在命名时为了更好的标识表与应用程序之间的关系,我们要使用“[functionname]|[mainmodulename]_表名”的形式.
比如:
Newegg_customer
Blocked_customer
Abs_customer
EDI_....
MDF_....
当要修改一个对象的架构时,首先要确认与之存在依存关系的对象不受影响.要查看与之存在依存关系的对象,可以在企业管理器中”右键相应对象”->
”ALLTASKS”->
”DISPLAYDEPENDENCIES”来查看或者使用系统存储过程SP_DEPENDS来查看:
EXECSP_DEPENDS'
dbo.GetCategories’
当底层表结构更改时,视图都应该被重新创建.这个应该特别被注意,特别是视图是使用如”SELECT*FROMtable”时.
强烈建议任何时候都不要使用类似于”SELECT*FROM”的语句.
当在不存在事务上下文中或者是完整性要求不是很高时,在SELECT语句中使用WITHNOLOCK.
5.5缩写规范
由于长度的限制而需要使用缩写时,应当遵从以下的规则:
以分类单词作为名字的起始.
缩写的第一个字符应该与单词的第一个字母相同,比如,SFER就不是Transfer的有效缩写.
Identifyandabbreviatetherootword,usuallytheshortestformoftheword.
缩写时省略元音字符,除非特殊原因,重复字符中将被省略一个。
缩写不应该暗示到其它的单词(比如:
单词“parent”可能被缩写为”PRNT”,但是“PRNT”很容易让人想起单词“PRINT”,一个比较好的缩写就是使用”PSRNT”)
相似单词的缩写应该一致,比如如果Charge缩写为CHRG,则change应该被缩写为CHNG.
当组合词或者短语被广泛使用时,并且大多人都能识别出这些缩写时,应该使用他们的首字母缩写,因为大多人都能识别出这些缩写。
5.6列名
列名应该基于逻辑设计中的属性名,
修饰符:
可选,它以角色名而被大家所熟知(PrimaryPartID,AlternatePartID)
主词(primaryword):
除非是主键,否则不需要。
因为表名已经限定列名,所以不必要冗余的加入此信息。
限定词:
可选;
附加的描述信息,用来帮助我们更明确的了解数据的意义(InventoryOnHandQuantity,CustomerLastName)
分类词:
需要;
用来标识数据的类型,一般列名的最后一个单词(PartID,CountryCode,CustomerName,InvoiceAmount).下面是一些标准的分类词:
CLASSIFIERDESCRIPTION
AddressStreetormailingaddressdata
AgeChronologicalageinyears
AverageAnumericalaverage(self-explanatory)
AmountCurrencyamount--alwaysismoney
CodeCodefromaspecificdomainofcodedvalues
CountCountofsomething--years,payments,etc.
DateCalendardate
DatetimeDateincludingtime
DayDayofmonth(1-31)
DescriptionBriefnarrativedescription(usuallyofacode)
DurationSpanoftime,whetherdays,months,years,etc.
IdentifierUniqueidentifierforsomething
ImageAgraphicimage,suchasabitmap
IndicatorAbooleanindicator
MeasurementMeasurementofphysicaldimensions
MonthMonthofyear
NameFormalnameofsomething
NumberNumber(self-explanatory)
PercentNumberexpressedasapercent
Quantityanumberofthings
RateNumberexpressedasarate
RatioAproportion,orexpressionofrelationshipinquantity,size,amount,etc.betweentwothings
TextFreeformtextualinformation
TimeTimeofday
WeightWeightmeasurement
YearCalendaryearorjulianyearnumber
下面的ERwindiagram示例推荐的命名协定:
5.7存储过程命名
存储过程命名使用上面描述的表,视图和列的命名一样的规则,包括不要使用特殊的字符,大写首词,不要使用组名(比如,myProc1),不要使用系统保留的“sp_”前缀(比如可以使用up_),使用文字数据式字符,为了使存储过程名字更有意义,名字中应包括“对象”+“动作”的方式。
存储过程命名示例:
Up_IM_CustomerGet(IM标识itemmaintain系统使用)
Up_IM_LoginValidate
Up_IM_RegionDataRotate
Up_IM_DailyUsageStatsUpdate
Up_IM_CustomerGetUsingLastName
下面是可选的命名规则,使用“动作”+“对象”的方式:
Up_IM_BuildSalesPerspectives
Up_IM_InsertSellInFileAudit
5.8游标命名
游标应该以下面的标准来命名:
表名或者对象名字{使用此游标的对象名字}+Cursor
例如:
FiscalMonthCURSOR
EmployeeListCURSOR
5.9触发器命名
触发器命名应该遵从以下的协定:
表名+{Ins|Upd|Del}
Ins标识此触发器为insert触发器,UPD标识此触发器为update触发器,同理DEL被用来标识delete触发器:
触发器示例:
CustomerIns
ProductCodeDel
BusinessUnitUpd
5.10索引命名
索引的命名应该在表空间内唯一,当查看执行计划时可以有效的对索引进行识别..
[IX][类型(U标识Unique,C标识Clustered)][列名(s)]
当对单列进行索引时,你可能需要使用列的全名.
当对多列进行索引时,要使用你所能想到的最优的缩写.
当对一个表的所有列进行索引时,使用ALL单词.
在多列名中使用下划线以增加可读性.
不要为索引加上序列号
IXUC_SalesId(clusteredunique)
IXU_SalesDate(unique)
IX_SalesId_MonId_QtrId_WkId(compositeindex)
IX_MonId_YrId(compositeindex)
IXC_SalesId(clusterednotunique)
5.11主键和外键命名
主键:
对主键进行命名应该遵从以下标准:
PK_表名
例如,主键名
PK_Customer
外键:
对外键进行命名时应该遵从以下标准:
ChildTableName_FK_ParentTableName
外键名字示例:
Customer_FK_Country
Sales_FK_Customer
5.12Check约束命名
Check约束的命名遵从以下的约定:
表名CK{数字}
数字被用来区别同一表中的其它Check约束.
Check约束命名示例:
CustomerCK1
5.13源文件命名
文件命名应该使用和数据库对象命名相同的规则-包括没有特
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL Server 设计命名编码规范 设计 命名 编码 规范