命名数据库表和视图

时间:2009-10-19 08:28:34

标签: sql naming-conventions

我最近问同事为什么他们在所有数据库表名的末尾都包含了_TABLE。他们说这是他们曾经为之工作过的另一个orgainisation的标准。其他同事在观点开头使用V_ 这是好习惯吗?

7 个答案:

答案 0 :(得分:31)

一致性是最好的方法。在对象名称的末尾添加_TABLE或_VIEW在我的书中是过度的,但如果数据库是按照这种方式设计的,那么我就不会违反惯例。

对于你的同事,在没有检查“本地”标准的情况下,将他之前组织的命名惯例带入新组织是不好的做法。

答案 1 :(得分:23)

使用v作为标准视图在我看来特别糟糕,因为它阻止您使用重构数据库的最佳方法之一,即重命名表并使用模仿旧结构的旧名称创建视图所以当你进行更改时没有什么中断,但你可以开始查找和修复所有旧的引用,而无需在更改生成之前修复所有引用。

我还想知道真正的问题是从其他组织那里获取命名约定并忽略当前组织的命名约定。我快速踩到这个并坚持他将所有对象和相关代码更改为你的标准,否则这将继续成为一个问题。

答案 2 :(得分:5)

如果经常读取SELECT查询,则使用v_或vw_前缀会很有用;您可以快速查看是从视图还是表中进行选择。前缀视图或后缀表应该足够,不需要两者。我们使用视图前缀。

此外,我们使用“模块”前缀来聚集功能组周围的表和视图。例如,计费相关表称为BIL_ *和计费相关视图VW_BIL_ *。模块命名使SSMS中的相关表和视图保持彼此靠近。

答案 3 :(得分:4)

它认为akf很好地回答了这个问题。 HLGEM对重构提出了一个很好的观点。

但是我会将此反驳添加到没有前缀/后缀约定。在SQL Server(可能还有其他数据库)中,您不能在具有相同所有者的同一模式中拥有表和具有相同名称的视图。为表创建非规范化视图是一种常见模式。如果您没有采用区分视图和表的命名约定,那么最终可能会为这些视图设置有趣的名称,例如EMPLOYEE_DENORM而不是EMPLOYEE_V。

如果需要进行重构,例如HLGEM描述,那么您的命名约定可以允许这样做。这样,那些没有前缀或后缀的视图很容易被识别为“重构”视图。

答案 4 :(得分:2)

来自http://vyaskn.tripod.com/object_naming.htm

数据库对象存在许多不同的命名约定,但没有一个是错误的。这更像是设计命名惯例的人的个人偏好。但是,在组织中,一个人(或一个组)定义数据库命名约定,对其进行标准化,而其他人则无论是否喜欢它都会遵循它。

阅读full article,了解有关如何在您的组织中实施/创建它的详细信息。

答案 5 :(得分:0)

我更喜欢在所有camelCase中命名我的表,以及字段名称。例如......

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

对于观点,我在前面加上“视图”这个词。例如......

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中没有任何内容。

我知道有些东西是缺少前面的单词视图的表格。这也可以防止表和具有相同名称的视图。

我不喜欢使用像“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,或创建过程或更改过程的预加密而使用的存储过程。因此,我将我的存储过程命名为“addUpdatePerson”,“getUserPermissions”等。

我在哪里使用前缀是在函数上,比如“fnValidateEmail”,因为它们可以与存储过程名称冲突。

答案 6 :(得分:0)

我认为最好的资源之一总是来自Microsoft的AdventureWorks数据库。如果您查看他们的视图,他们会以小写的“ v”作为前缀。

例如,表Employee的视图为vEmployee