多くの人が異なる基準を持っていると確信しているので、私はこの投稿をコミュニティwikiにしました。
私の質問は、テーブルエイリアスの適切な命名スキームは何ですか?テーブル名のすべての単語の最初の文字を使用してきましたが、かなり読みにくくなっています。これが簡単な例です。
FROM incidents i
FROM cause_attack ca
FROM obscure_table ot
ありがとうございました。
エイリアスの要点は、名前を短くして、冗長性を必要としないようにすることです。
特定のクエリ内で一意である必要があるだけなので、名前を付けるためのスキームは必要ありません。
編集:また、使用するエイリアスは、テーブルの命名スキームに大きく依存します。すべてのテーブルに5つの部分からなる名前があり、最初の4つがクエリ全体で共通である場合、それらの部分をエイリアスに保持するのはばかげています。
テーブル名自体はすでに読み取り可能である必要があります。したがって、読みやすい名前が必要な場合は、エイリアスを作成しないでください。
つまり、エイリアスの目的は、他の何よりも長い名前を再入力することからあなたの貧しい指を救うことです。その場合、特にフルネームのすぐ隣で宣言する必要があるため、短い簡潔な名前が適切に機能します。
ここでの唯一の例外は、テーブルを複数回結合する場合です。この場合、必要なテーブルのインスタンスを識別するための何かが必要になるか、サブクエリのエイリアスを作成する必要があります。
通常、テーブルの命名構造に従うようにしています。
のような話し言葉のテーブル名を使用'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'
同じ名前で始まる複数のテーブル、または同じテーブルへの複数の参照があるまで、最初の文字のみを大文字で使用することを除いて、私は一般的にあなたと同じようにします.2つを区別するために接尾辞を追加します.. . 読者に明確にするためのもの。外側のクエリと同じテーブルをサブクエリ (たとえば 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」として内部的に読み取ることができます。
データ ウェアハウジングのシナリオでは、通常、最初の文字を使用しますが、ファクト、ディメンション、または準拠したディメンション テーブルを区別するためにfact_
、、、dim_
またはのいずれかをプレフィックスとして使用します。また、ルックアップcdim_
も行います (したがって、になります)。lkup_
LOOKUP_TRANSACTION_TYPE
lkup_TT
ルックアップ手法は、OLTP タイプのデータベースでも機能します。
通常、私は略語を理解するのが難しいクエリに膨大な数のテーブルを持っていません。通常、テーブルのエイリアス間に競合はありません (多くの場合SYSTEM_SUBSYSTEM_ENTITY_TYPE
、 のようなグループ化が既に存在するため)。テーブル名には常に同じエイリアスがあります。
これは、A、B、C または T1、T2、T3 手法よりも優れた利点です。これは、追跡可能であり、カット アンド ペースト エラーを回避するのに役立つためです。
私は 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
繰り返しますが、プレフィックスは、結合を構築するときに「推奨される」(そして強制される!) テーブル エイリアスを思い出させるためにあります。関連するフィールド名でさえプレフィックスが付けられているため、すでにいくらか名前のスコープが設定されているため、フィールドの前にテーブルを明示的に参照する必要があることは非常にまれだったため、プレフィックスを付けることで、結合クエリの大部分を簡単に記述できるようになりました。
きちんとした副次的な効果として、最終的には、開発者が接頭辞だけで会話中にテーブルを参照できるようになる可能性があります。確かに、後天的な味です...しかし、それは私たちにとってはうまくいきます。