可读的SQL别名

时间:2008-11-17 16:10:32

标签: sql oracle alias

由于我确信很多人都有不同的标准,所以我把这篇文章称为社区维基。

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

FROM incidents i
FROM cause_attack ca
FROM obscure_table ot

谢谢。

6 个答案:

答案 0 :(得分:6)

别名的全部意义在于缩短名称,因此您不需要冗长。

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

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

答案 1 :(得分:6)

表名称本身应该是可读的。因此,如果您想要一个可读的名称,请不要使用别名。

这意味着别名的目的是为了避免你的可怜手指重新输入长名称。在这种情况下,简短的名称很有效,特别是因为它们必须在全名旁边声明。

这里唯一的例外是如果您多次加入一个表,在这种情况下,您需要一些东西来识别您需要的表的哪个实例,或者您是否对子查询进行别名。

答案 2 :(得分:3)

通常我会尝试遵循表格的命名结构。

我尝试使用说话表名称,例如'RelObjectProperty',并且一致地使用它们(对于此示例)'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'的查询中。

答案 3 :(得分:1)

我通常和你一样做,除了我只使用大写的第一个字母,直到我有多个以相同名称开头的表,或多个refs到同一个表,然后我添加一个后缀来区分二......任何让读者清楚的事情。如果我在子查询中使用相同的表(比如Employee表),那么我可以使用前缀i或o来区分,如

-- 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时,我可以在内部将别名读作“内部员工”或“外部员工”

答案 4 :(得分:0)

在数据系统方案中,我通常使用前面的字符,但前缀为fact_dim_cdim_,以便区分事实,维度或一致的维度表。我也会lkup_进行查询(因此LOOKUP_TRANSACTION_TYPE将成为lkup_TT)。

查找技术也适用于OLTP类型的数据库。

通常,我在查询中没有大量的表,其中缩写很难遵循,并且通常表别名之间没有任何冲突(因为通常已经有一些像SYSTEM_SUBSYSTEM_ENTITY_TYPE这样的分组),实际上,表名始终具有相同的别名。

这是一个优于A,B,C或T1,T2,T3技术的优势,因为它可以跟随并有助于避免剪切和粘贴错误。

答案 5 :(得分:-1)

虽然我不是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

同样,前缀可以在构建连接时提醒“推荐”(和强制!)表别名。前缀使得大多数连接查询更容易编写,因为很少需要在字段之前显式引用表,因为甚至相关的字段名称都是前缀的,因此已经有点名称范围。

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