1

因为我确信很多人有不同的标准,所以我把这篇文章做成了一个社区维基。

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

FROM incidents i
FROM cause_attack ca
FROM obscure_table ot

谢谢你。

4

6 回答 6

6

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

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

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

于 2008-11-17T16:13:34.240 回答
6

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

这意味着别名的目的与其他任何事情一样,都是为了避免您可怜的手指重新输入长名称。在这种情况下,简短的名称效果很好,特别是因为它们必须紧挨着全名声明。

这里唯一的例外是,如果您不止一次地加入一个表,在这种情况下,您需要一些东西来确定您需要的表的哪个实例,或者如果您正在为子查询设置别名。

于 2008-11-17T16:15:28.120 回答
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

此首字母缩略词方案对于具有严格无冲突表名的数据库很有帮助,但不能始终保证这一点。

可能有一个 table 'RelObjectPresentation',在这种情况下,我很可能会破坏该方案并'rop'用于第一个和'ropr'后者。即使在这种情况下,我也会保持一致,至少在任何地方都'ropr'使用别名,而不仅仅是在我需要区分的查询中。'rop'

于 2008-11-17T16:17:32.203 回答
1

我通常和你做类似的事情,除了我只使用第一个字母,大写,直到我有多个以相同名称开头的表,或者同一个表的多个引用,然后我添加一个后缀来区分两者..任何让读者清楚的东西。如果我在子查询中使用与外部查询相同的表(比如 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 时,我可以在内部将别名读取为“Inner Employee”或“Outer Employee”

于 2008-11-17T16:19:28.050 回答
0

在数据仓库场景中,我通常使用第一个字符,但前缀为fact_dim_cdim_,以区分事实、维度或一致的维度表。我也会做lkup_查找(所以LOOKUP_TRANSACTION_TYPE会变成lkup_TT)。

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

通常,我在查询中没有大量的表,其中缩写词很难理解,而且表别名之间通常没有任何冲突(因为通常已经有一些分组,例如SYSTEM_SUBSYSTEM_ENTITY_TYPE),因此,实际上,表名始终具有相同的别名。

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

于 2008-11-17T16:23:02.490 回答
-1

虽然我不是 Oracle 人(实际上,这个问题应该适用于几乎所有 RDBMS),但我对“您被迫遵循的最奇怪的编码标准规则是什么”的回答似乎在这里适用(编辑以使其在这篇文章的上下文)...

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

方案如下:每个表都以大写字母命名,单词之间有下划线。每个表都有一个前缀(通常为 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

同样,在构建连接时,前缀是为了提醒“推荐”(和强制!)表别名。前缀使大多数连接查询更容易编写,因为您必须在字段之前显式引用表是非常罕见的,因为即使相关的字段名称也有前缀,因此已经有点名称范围。

一个巧妙的副作用是,最终,您的开发人员可能能够通过前缀来开始引用对话中的表。可以肯定的是,后天的品味……但这对我们有用。

于 2008-11-17T16:23:35.547 回答