由于我确信很多人都有不同的标准,所以我把这篇文章称为社区维基。
我的问题是,表别名有什么好的命名方案?我一直在使用表名中每个单词的第一个字母,但它已经变得非常难以理解了。这是一个简单的例子。
FROM incidents i
FROM cause_attack ca
FROM obscure_table ot
谢谢。
答案 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
同样,前缀可以在构建连接时提醒“推荐”(和强制!)表别名。前缀使得大多数连接查询更容易编写,因为很少需要在字段之前显式引用表,因为甚至相关的字段名称都是前缀的,因此已经有点名称范围。
一个简洁的副作用是,最终,您的开发人员可能只能通过前缀开始引用对话中的表。获得的味道,可以肯定......但它对我们有用。