因爲我確定很多人有不同的標準,所以我把這篇文章寫成了一個社區維基。可讀的SQL別名
我的問題是,什麼是一個很好的表別名的命名方案?我一直使用表名中每個單詞的第一個字母,但它已變得難以理解。這是一個簡單的例子。
FROM incidents i
FROM cause_attack ca
FROM obscure_table ot
謝謝。
因爲我確定很多人有不同的標準,所以我把這篇文章寫成了一個社區維基。可讀的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
同樣,前綴在那裏是「建議」(和強迫!)表別名時的建築加入提醒。前綴使得大多數連接查詢更易於編寫,因爲很少有必要在字段之前明確引用表,因爲甚至相關的字段名都加了前綴,因此已經有些名稱範圍。
一個簡單的副作用是,最終,您的開發人員可能只需通過前綴即可開始引用對話中的表。可以肯定的是一種獲得的品味......但它適用於我們。
我發現SQL代碼在一切都是大寫時非常難以遵循。但是,當涉及到表別名時,前綴可以避免任何名稱空間衝突或模糊(儘管它對我來說很尷尬)。 – Tomalak 2008-11-17 16:59:11