命名数据库表和视图

24

最近我问了一个同事为什么在他们的数据库表名末尾都包含了“_TABLE”。他说这是在他之前工作的另一个组织中的标准。其他同事在视图名称前使用“V_”。

这样做是好的做法吗?

7个回答

44

保持一致性是最好的方法。在对象名称末尾添加_TABLE或_VIEW未必是必要的,但如果数据库是按照这种方式设计的,我不会违反惯例。

你的同事将他以前组织中的命名约定带入新组织而没有检查“当地”标准是不好的做法。


37

在我眼中,将 v 视为视图的标准特别糟糕,因为这会阻止你使用数据库重构的最佳方法之一,即重新命名表并创建一个模拟旧结构的视图,使得在进行更改时不会出现问题,同时你可以开始查找和修复所有旧引用,而无需在将更改发布前就必须全部修复。

我也同意 akf 的想法,真正的问题是从其他组织采用命名约定并忽略当前组织的命名约定。我会迅速采取行动,坚持要求他将所有对象和相关代码更改为符合你们的标准,否则这将继续成为一个问题。


7
使用v_或vw_前缀对于经常查阅SELECT查询的人很有用,可以快速确定你是从视图还是表中进行选择。只需添加视图前缀或表后缀即可,不需要两者都使用。我们使用视图前缀。
此外,我们使用“模块”前缀将表和视图聚集在一个功能组中。例如,与计费相关的表称为BIL_*,与计费相关的视图称为VW_BIL_*。模块命名使相关的表和视图在SSMS中靠近彼此。

7
我认为akf回答了这个问题。HLGEM提出了关于重构的好观点。
然而,我想对没有前缀/后缀约定的反驳加以补充。在SQL Server(以及其他数据库)中,您不能在同一架构和所有者下拥有相同名称的表和视图。创建一个非规范化视图以供表使用是一种常见模式。如果您没有采用区分视图和表的命名约定,则可能会得到这些视图的奇怪名称,例如EMPLOYEE_DENORM而不是EMPLOYEE_V。
如果需要进行类似HLGEM描述的重构,则您的命名约定可以允许这样做。这样,那些没有前缀或后缀的视图就可以被轻松地识别为“重构”视图。

2

来源于http://vyaskn.tripod.com/object_naming.htm

针对数据库对象的命名约定有很多种,但是没有一种是错误的。这更多是由设计命名约定的人的个人偏好所决定。然而,在一个组织中,一个人(或一组人)定义了数据库命名约定,将其标准化后,其他人无论喜欢与否都会遵循它。

阅读完整文章了解如何在您的组织中实现/创建它。


1

我更喜欢将我的表格和字段名都命名为驼峰式大小写。例如...

CREATE TABLE [crm].[company]
(
    [id] INT NOT NULL PRIMARY KEY,
    [companyName] NVARCHAR(255) NOT NULL
)

对于视图,我会在它们前面加上“view”这个单词。例如...

CREATE VIEW [crm].[viewFullEmployee]
    AS SELECT e.id, e.companyId, e.niceId, e.startDate, e.fullPart, p.firstName, p.middleName, p.lastName, p.active, p.birthDate, p.email, p.alternateEmail, p.phone, p.phoneExt, p.homePhone, p.mobilePhone, p.jobTitle, p.suffix, p.prefix FROM [crm].[Employee] as e FULL JOIN [crm].[person] as p on e.id = p.id

我把所有内容都分成了模式,不使用默认模式。这强制我在查询中始终为事物指定模式,因为没有东西在dbo中。
我通过缺少单词“view”来知道某些内容是表格。这也防止了拥有相同名称的表格和视图。
我不喜欢使用下划线名称,例如"employee_v",因为我使用T4模板"PetaPoco"生成所有数据层代码,而当引用类型时,我不想在代码中输入下划线。
我只是更喜欢这个。
var person = uow.Db.Fetch<Models.viewFullEmployee>("SELECT * FROM [crm].[viewFullEmployee]");

vs

var person = uow.Db.Fetch<Models.fullEmployee_V>("SELECT * FROM [crm].[fullEmployee_V]");

关于存储过程,我认为它们不需要像许多人所做的那样加上前缀“sp_”。你知道由于EXEC、Create Procedure或Alter Procedure的前缀,正在使用存储过程。因此,我将我的存储过程命名为“addUpdatePerson”、“getUserPermissions”等。
而我在函数中使用前缀,例如“fnValidateEmail”,因为它们可能与存储过程名称冲突。

0

我认为最好的资源之一始终是微软的AdventureWorks数据库。如果您查看它们的视图,它们会以小写字母“v”作为前缀。

例如,表Employee有一个视图vEmployee


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接