首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

21.9.3  命名约定

下面的提示和约定与.NET并不直接相关,但应共享和遵循,特别是在给约束命名时是非常有效的,如果您对此主题已经有了自己的命名方式,就可以跳过本节。

1. 数据库表的约定

       总是使用单数名称—— Product而不是Products,这是一个普遍适用的约定,因为我们必须给客户解释某种数据库模式,从语法上看,“product表包含产品”要比“products表包含产品”好得多。但Northwind数据库并没有遵循这一约定。

       给表中的字段采用某种形式的命名约定,我们采用的是表的主键码为<Table>_ID(假定主键码是一个列),字段采用Name,这是考虑到记录的用户友好性,记录本身的文本信息采用Description。采用好的命名约定,则只要查看一下数据库中的表,就知道其中的字段主要用于什么目的。

2. 数据库列的约定

       使用单数名称,而不是复数名称。

       链接到另一个表中的列名应与该表的主键码名相同,所以,链接到Product表的列名为Product_ID。链接到Sample表的列名为Sample_ID,这并不总是可行的,如果一个表有另一个表的多个引用,这个命名约定就无效了。此时应使用其他方式命名。

       日期字段应有一个_On后缀,例如Modified_On Created_On。按照这种命名约定,如果读取一些SQL输出,很容易从列的名称中知道该列的含义。

       记录用户的字段名应有一个_By后缀,例如Modified_By Created_By,这将有助于阅读。

3. 约束的约定

       如果可能,在约束名中包含表名和列名,例如CK_<Table>_<Field>。对于person表中的Sex(性别)列,其检查约束可以是CK_PERSON_SEX,而product supplier表之间的外键码名可以是FK_Product_Supplier_ID

       约束类型的前面加一个前缀,例如CK表示检查约束,FK保持外键码约束,也可以指定更为特殊的名称,例如Age列上的CK_PERSON_AGE_GT0表示该年龄应大于0

       如果必须限制约束名的长度,可以在其中包含表名,而不包含列名。在发现有违反约束的情况时,通常很容易知道哪个表出现错误,但有时不容易检查出是哪个列出了问题。Oracle允许名称的长度为30个字符,而这种限制很容易被打破。

4. 存储过程

在过去几年中,把C放在每个声明的类前面令人困惑。如此一样,许多SQL Server开发人员也困惑于在每个存储过程的前面加上sp_或类似的东西,这不是一个好方法。

SQL Server在所有的系统存储过程前面使用sp_前缀。所以一方面,用户会对sp_widget是否为SQL Server标准存储过程产生疑问,另外,当查找存储过程时,SQL Server会把带有sp_前缀的过程与没有该前缀的过程区别对待。

如果使用这个前缀,但不是该存储过程的数据库/拥有者,SQL Server就会在当前范围内查找,然后跳到主数据库中查找存储过程。没有sp_前缀,用户就会早一些得到错误。更糟糕的是创建的本地存储过程(在自己的数据库中创建的)与系统的存储过程有相同的名称和参数。应尽可能避免这种情况,如果有疑问,就不要使用前缀。

在调用存储过程时,应在名称的前面加上过程拥有者前缀,如db.selectWidgets。这将比不使用该前缀略快一些,因为SQL Server查找该存储过程所做的工作较少。这不会对应用程序的执行速度有很大的影响,但可以自由使用。

在数据库或代码中命名实体时,应采用一致的命名约定。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论