1

多くの人が異なる基準を持っていると確信しているので、私はこの投稿をコミュニティwikiにしました。

私の質問は、テーブルエイリアスの適切な命名スキームは何ですか?テーブル名のすべての単語の最初の文字を使用してきましたが、かなり読みにくくなっています。これが簡単な例です。

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

同じ名前で始まる複数のテーブル、または同じテーブルへの複数の参照があるまで、最初の文字のみを大文字で使用することを除いて、私は一般的にあなたと同じようにします.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」として内部的に読み取ることができます。

于 2008-11-17T16:19:28.050 に答える
0

データ ウェアハウジングのシナリオでは、通常、最初の文字を使用しますが、ファクト、ディメンション、または準拠したディメンション テーブルを区別するためにfact_、、、dim_またはのいずれかをプレフィックスとして使用します。また、ルックアップcdim_も行います (したがって、になります)。lkup_LOOKUP_TRANSACTION_TYPElkup_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 に答える