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查找该存储过程所做的工作较少。这不会对应用程序的执行速度有很大的影响,但可以自由使用。
在数据库或代码中命名实体时,应采用一致的命名约定。





