可读的SQL别名

问题描述:

因为我确定很多人有不同的标准,所以我把这篇文章写成了一个社区维基。可读的SQL别名

我的问题是,什么是一个很好的表别名的命名方案?我一直使用表名中每个单词的第一个字母,但它已变得难以理解。这是一个简单的例子。

FROM incidents i 
FROM cause_attack ca 
FROM obscure_table ot 

谢谢。

别名的全部要点是缩短名称,所以不需要冗长。

它只需要在给定的查询中是唯一的,因此不需要用于命名它们的方案。

编辑:此外,您使用的别名高度依赖于表命名方案。如果您的所有表都有一个由5个部分组成的名称,而前4个名称在查询中是通用的,那么将这些部分保留在别名中是愚蠢的。

表名称本身应该已经可读。因此,如果你想要一个可读的名字就不要别名。

这意味着别名的目的是尽可能多地保存你可怜的手指从重新输入长名称到其他任何东西。在这种情况下,简短的名字工作得很好,尤其是因为他们必须在全名旁边声明。

这里唯一的例外是,如果你在不止一次加入一个表,在这种情况下你需要的东西来确定你所需要的,或者如果你混叠子查询表的哪个实例。

通常我会尝试按照表的命名结构。

我尝试使用来讲表的名称,如​​和别名他们一贯喜欢(在这个例子中)'rop'

SELECT 
    p.Name PropertyName, 
    o.Name ObjectName, 
    rop.Value PropertyValue 
FROM 
    Property p 
    INNER JOIN RelObjectProperty rop ON rop.PropertyId = p.Id 
    INNER JOIN Object    o ON rop.ObjectId = o.Id 
WHERE 
    o.Id = 10 

此首字母缩写方案,有助于严格的无碰撞表名数据库,但这并不总能得到保证。

有可能是一张桌子'RelObjectPresentation',在这种情况下,我将最有可能突破的方案,并使用'rop'第一和'ropr'后者。即使在这种情况下,我会是不一致的是一致的,并至少使用'ropr'别名到处,而不是只在查询中,我需要一个区别于'rop'

我一般会和你一样做,除非我只用大写的第一个字母,直到我有多个以相同名称开头的表或者多个表指向同一个表,然后我添加一个后缀来区分两个......任何事都要向读者说清楚。如果我用的是同一个表中的子查询(比如雇员表),如在外部查询,我可以使用前缀我或o distinquish,如

-- Find Highest paid Emplyees in Each Division ..... 
Select * From Employee oE -- For outer Employee table 
Where Salary = (Select Max(Salary) 
       From Employee iE 
       Where DivisionId = oE.DivisionId) 

这样,当我读了SQL,我们可以从内部读别名“内雇员”或“外雇员”

在datawarehousing方案中,我通常使用的第一个字符,但前缀或者fact_dim_,或cdim_为了区别事实,尺寸,或一致的维度表。我也将为lkup_进行查找(因此LOOKUP_TRANSACTION_TYPE将变为lkup_TT)。

查找技术也可以在OLTP类型的数据库中使用。

通常情况下,在查询中没有大量的表格,在这些表格中,缩写将很难遵循,并且通常表格别名之间没有任何冲突(因为通常已经有一些分组,如SYSTEM_SUBSYSTEM_ENTITY_TYPE),所以实际上,表名总是具有相同的别名。

与A,B,C或T1,T2,T3技术相比,这是一个很好的优势,因为它是可追踪的,有助于避免剪切和粘贴错误。

虽然我不是一个Oracle家伙(实际上,这个问题应该适用于几乎所有的RDBMS),我answer to "What was the strangest coding standard rule that you were forced to follow"似乎适用以及在这里(编辑这个职位的范围内有意义)......

对我们来说,这全是关于表名。我们从使用这个标准的客户那里得到了这个想法,并且在我们都适应了它之后,我们就喜欢它。表名相当冗长,但由于所有这些表的唯一助记符前缀,我们总是有一组标准化的别名:只需使用前缀即可。一旦我们脱离了这个客户,我们就保留了新系统的命名方案,并从此一直非常成功。

下面是该方案:每个表都以大写字母命名,并在单词之间加下划线。每个表都有一个前缀(通常为1-6个字符),通常是主表名称的首字母缩略词或缩写。表格的每个字段都以相同的前缀作为前缀。前缀在复杂查询中也用作别名。所以,假设你有一个简单的模式,人们可以拥有猫或狗。它会是这样的:

PER_PERSON 
    PER_ID 
    PER_NameFirst 
    PER_NameLast 
    ... 
CAT_CAT 
    CAT_ID 
    CAT_Name 
    CAT_Breed 
    ... 
DOG_DOG 
    DOG_ID 
    DOG_Name 
    DOG_Breed 
    ... 
PERCD_PERSON_CAT_DOG (for the join data) 
    PERCD_ID 
    PERCD_PER_ID 
    PERCD_CAT_ID 
    PERCD_DOG_ID 

同样,前缀在那里是“建议”(和强迫!)表别名时的建筑加入提醒。前缀使得大多数连接查询更易于编写,因为很少有必要在字段之前明确引用表,因为甚至相关的字段名都加了前缀,因此已经有些名称范围。

一个简单的副作用是,最终,您的开发人员可能只需通过前缀即可开始引用对话中的表。可以肯定的是一种获得的品味......但它适用于我们。

+0

我发现SQL代码在一切都是大写时非常难以遵循。但是,当涉及到表别名时,前缀可以避免任何名称空间冲突或模糊(尽管它对我来说很尴尬)。 – Tomalak 2008-11-17 16:59:11