web-dev-qa-db-ja.com

PostgreSQLの命名規則

PostgreSQLの命名規則に関する詳細なマニュアルはどこにありますか? (テーブル名とキャメルケース、シーケンス、主キー、制約、インデックスなど)

159
boj

テーブル名、ケースなどに関して、一般的な規則は次のとおりです。

  • SQLキーワード:UPPER CASE
  • 名前(識別子):lower_case_with_underscores

UPDATE my_table SET name = 5;

これは石では書かれていませんが、小文字の識別子についてのビットを強くお勧めします、IMO。 Postgresqlは、引用符が付いていない場合は大文字と小文字を区別せずに(実際には内部的に小文字に変換します)、引用符が付いている場合は大文字と小文字を区別して処理します。多くの人はこの特異性に気付いていません。常に小文字を使用すると安全です。とにかく、一貫性がある限り、camelCaseまたはPascalCase(またはUPPER_CASE)を使用してもかまいません:識別子を常に引用するか、引用しないか(これにはスキーマの作成が含まれます!)。

私はこれ以上多くの規則やスタイルガイドを知りません。代理キーは通常、シーケンスから作成されます(通常は serial マクロを使用)。手動で作成する場合は、これらのシーケンスの名前をそのまま使用すると便利です(tablename_colname_seq)。

いくつかの議論も参照してください herehere および(一般的なSQLの場合) here 、すべて関連するリンクがあります。

206
leonbloy

単一のスタイルや標準が存在しないため、正式なマニュアルはありません。

識別子の命名規則 を理解している限り、好きなものを使用できます。

実際には、lower_case_underscore_separated_identifiersを使用する方が簡単だと思います。なぜなら、ケースやスペースなどを保持するためにどこにでも"Double Quote"する必要がないからです。

テーブルと関数に"@MyAṕṕ! ""betty"" Shard$42"という名前を付けたい場合は、自由に入力できますが、どこにでも入力するのは大変です。

理解すべき主なものは次のとおりです。

  • 二重引用符で囲まない限り、識別子は小文字に変換されるため、MyTableMYTABLE、およびmytableはすべて同じですが、"MYTABLE"および"MyTable" 異なっています;

  • 二重引用符で囲まれていない場合:

    SQLの識別子とキーワードは、文字(a〜z、ただし発音区別符号と非ラテン文字を含む文字)またはアンダースコア(_)で始まる必要があります。識別子またはキーワードの後続の文字には、文字、アンダースコア、数字(0〜9)、またはドル記号($)を使用できます。

  • キーワードを識別子として使用する場合は、キーワードを二重引用符で囲む必要があります。

実際には、識別子として keywords を使用しないしないことを強くお勧めします。少なくとも予約語は避けてください。テーブルに"with"という名前を付けることができるからといって、そうすべきだというわけではありません。

22
Craig Ringer