存储过程、函数和视图
欢迎来到关于 SQL 命名约定的第 3 部分也是最后一部分。在第 1 部分中,我们介绍了命名表的规则,第 2 部分则讲述了列名的约定。而本文将提供命名其他数据库对象(如存储过程、函数和视图)的一些准则。
存储过程
存储过程是一组执行某些已定义动作的语句。通常,它们都会包含常用的语句。存储过程类似于编程中的函数,它们可以接受参数,并在调用时执行操作。
一般格式
大多数 DBA 喜欢给他们的存储过程一个前缀以作标识,然后是存储过程的动作,最后是代表它将影响的一个或多个对象的名称:
[前缀]_[动作]_[对象]
你可以使用存储过程的动作包括:
- Insert
- Delete
- Update
- Select
- Get
- Validate
选择前缀
存储过程使用的最明显前缀是“sp_”。话虽如此,实际上至少有一个合理理由令你避免使用它,因为 SQL Server 已经将它用作 master 数据库中存储过程的标准命名约定。如果不指定对象所在的数据库,SQL Server会先搜索 master 数据库以查看对象是否存在,然后再搜索 user 数据库。即使你的数据库不是在 SQL Server,你也应该尽量避免将“sp_”用作命名约定,以防日后你转用 SQL Server。
因此,请考虑使用像“usp_”这样的前缀。
将所有部分组合起
以下是一些命名良好的存储过程示例,你可以将其用作制定命名约定的参考:
- usp_insert_person
- usp_delete_person
- usp_update_person
- usp_select_person
- usp_get_person
- usp_validate_person
用户定义函数
用户定义函数与内置数据库函数类似,它只接受输入参数,并有一组执行动作和返回结果的 SQL 语句,结果可以是单个值或一个表。
用户定义函数的命名约定是具有“fn_”前缀,后面是其动作。因此,它的语法应该与存储过程的语法非常相似:
[前缀]_[动作]_[对象]
返回 true 或 false 的函数可以遵循使用“is”或“are”作为动作(动词)的规则。
函数名称的一些例子:
- fn_count_string_instances
- fn_get_customer_balance
- fn_is_inventory_in_stock
- fn_get_column_type
函数
视图是一个“虚拟表”,其内容由查询定义。视图可以使用联接将来自两个或多个表的数据组合起来,也可以只包含一个信息子集。这使它们可以方便地摘取或隐藏复杂的查询。
视图的命名约定应具有“v_”或“vw_”前缀,后面是名称空间、结果。因此,语法应该是:
[前缀]_[结果]
以下有一些例子:
- vw_actor_full_name
- vw_sales_by_store
- v_staff_list
- v_sales_by_product_category
关于 SQL 中存储过程、函数和视图命名约定的结语
在这个由三部分组成的系列中,我们探索了一些常用的命名约定,并研究如何以最佳方式制定自己的命名约定。系列的第 1 部分介绍了表名,而第 2 部分重点介绍了列名。最后,第 3 部分介绍了其他数据库对象(例如过程、函数和视图)的命名约定。
请记住,你无需将规则用于所有数据库对象。你可以选择将命名约定规则仅用于表名和列名。这实际上全由是你决定,因为使用命名约定不是强制的,但仍然是有其好处。