テーブルの命名:アンダースコアとキャメルケース?名前空間?単数形と複数形?


89

私はStackOverflowでいくつかの質問/回答を読んで、データベース上のテーブルに名前を付けるための「最良の」方法を見つけようとしています。

ほとんどの開発者は、データベースを必要とする言語(JAVA、.NET、PHPなど)に応じてテーブルに名前を付ける傾向があります。しかし、私はこれが正しくないと感じています。

これまでテーブルに名前を付けてきた方法は、次のようなことです。

doctorsMain
doctorsProfiles
doctorsPatients
patientsMain
patientsProfiles
patientsAntecedents 

私が懸念していることは次のとおりです。

  • 読みやすさ
  • テーブルのモジュールのクイック識別(医師||患者)
  • 混乱を防ぐために、理解しやすい。

命名規則に関するご意見をお聞かせください。ありがとうございました。

回答:


180

一貫性を保つことは、使用する特定のスキームよりもはるかに重要です。


21
言い換えれば、はい、よくやった、あなたはいくつかの一貫したスキームを特定しました。それを続けてください!
Phil H

3
コメントは+1。また、現在の命名スキームの補足として、特にSQLクエリにエイリアスを使用しない場合はPascalCaseの方が優れています。このようにして、テーブルの列名にキャメルケースを使用し、テーブル名にパスカルケースを使用できます。
MarioRicalde 2009

3
テーブル名のパスカル/キャメルケースは、いくつかの問題を引き起こす可能性があります。すべてのテーブルのファイルシステムにファイルがあり、一部のテーブルでは大文字と小文字が区別されません(OSXなど)。
ismriv 2013

2
@ismrivこれは、一貫性がない場合にのみ問題になります。常に同じ一貫性のあるケースでテーブル/ビュー/列を参照している場合は、問題は発生しないはずです。これらの名前を書くときに怠惰にならないことで、大きなメリットが得られます。後で読むときの利点。テーブルにPascalCaseを使用し、列にcamelCaseを使用すると、名前のタイプを一目で識別でき、一般的なオブジェクト指向の規則を模倣できます。
TWiStErRob 2014

一貫性が重要であることに完全に同意しますが、これは古い質問であり、RedshiftやSnowflakeなどの新しいデータベースプラットフォームを使用している人々にとって、デフォルトですべて大文字または小文字の識別子になっている場合は、あなたのことを考えること非常に重要です。命名規則は最初からです。これらのプラットフォームでキャメルケースのような命名規則を使用することを選択すると、後で不必要な頭痛の種が発生する可能性があります。たとえば、引用符で囲まれた識別子を常に使用する必要があり、オブジェクトの名前解決によって予期しない結果が生じる可能性があります。
ネイサングリフィス

22

私は通常PascalCaseを使用し、エンティティは単数です。

DoctorMain
DoctorProfile
DoctorPatient

これは、私のアプリケーションのクラスの命名規則を模倣しており、すべてを非常にきちんと整理し、一貫性を保ち、誰にとっても理解しやすいものにしています。


3
はい...はい、そうです。今朝は少し霧がかかっています。編集を行う...ありがとう。
Justin Niessner 2009

3
「CapitalCase」とも呼ばれます。
corsiKa 2013年

3
30年の経験で「CapitalCase」と呼ばれるのは聞いたことがありません。最も「キャメルケース」と呼ばれていると聞きましたが、最近では「パスカルケース」が取り上げられています。歴史的にほとんど大文字と小文字を区別していなかったのに、なぜ人々がSQLにキャメルケースを使用しているように見えるのかを見るためにここに来ました。私は確かに時代遅れになりたくありません。
シンシアV 2017

@SinthiaV他の人のことはわかりませんが、私たちの場合、JS ORMを使用しているので(残念ながら)オプションは1)データベースでcamelCaseを使用して規則を破る2)JSでsnake_caseを使用して規則を破る3)map camelCase JSでdbのsnake_caseに。データベースでキャメルケースを使用することを最初はあまり考えずに決めました。それほど悪くはありませんが、すべてを引用するのは少し面倒です。
アンディ

@SinthiaVは役に立たないコメントとして、これは実際のSOの質問のコンテキストにある可能性があり、PascalCaseはcamelCaseと同じではありません。PascalCaseは各単語の最初の文字(重要なのは最初の文字を含む)を大文字にしますが、camelCaseは最初の単語の後の単語のみを大文字にします。さらに読書:medium.com/better-programming/...
curiouser

11

SQLの大文字と小文字を区別しない性質はをサポートしますUnderscores_Scheme。ただし、最新のソフトウェアは、あらゆる種類の命名スキームをサポートしています。ただし、厄介なバグ、エラー、または人的要因によってUPPERCASINGEVERYTHING、両方を選択しPascal_CaseUnderscore_Case計画を立てた人が神経を使って適切な場所に住むようになる場合があります。


10

上記のほとんどの集合体:

  • データベース内の大文字と小文字を区別しないでください
  • 名前の大文字と小文字または区切り文字の部分は考慮しないでください-単語だけ
  • あなたの言語の標準であるセパレーターやケースを使用してください

そうすれば、環境間で名前を(自動的にでも)簡単に翻訳できます。

ただし、別の考慮事項を追加します。アプリのクラスからデータベースのテーブルに移動すると、他の要因があることに気付く場合があります。データベースオブジェクトには、ビュー、トリガー、ストアドプロシージャ、インデックス、制約などがあります。名前も必要です。したがって、たとえば、通常は単純な「select * fromfoo」であるビューを介してのみテーブルにアクセスすることに気付く場合があります。これらは、サフィックスが「_v」のテーブル名として識別される場合もあれば、別のスキーマに配置される場合もあります。このような単純な抽象化レイヤーの目的は、必要に応じて拡張して、一方の環境での変更を許可し、もう一方の環境への影響を回避できるようにすることです。これは、上記の命名の提案を破ることはありません-説明する必要があるいくつかのことだけです。


8

アンダースコアを使用します。私は数年前にOracleプロジェクトを実行しましたが、Oracleはすべてのオブジェクト名を大文字に強制しているようでした。これは、あらゆるケーシングスキームに打撃を与えます。私は実際にはオラクルの人ではないので、気づかなかった方法があったかもしれませんが、アンダースコアを使用するようになり、戻ったことはありません。


2
11g以降では、テーブル名を二重引用符で囲むと大文字と小文字が区別されないようです。将来の参考のためにこれをここに置きます。Postgresもそうしていることは確かですが、他のデータベースエンジンはそうではないかもしれません。
ジョンO

8

質問は特定のプラットフォームまたはDBエンジンに固有のものではないため、移植性を最大限に高めるために、常に小文字のテーブル名を使用する必要があります。

/ [a-z _] [a-z0-9 _] * /は、実際には、異なるプラットフォーム間でシームレスに変換される唯一の名前のパターンです。小文字の英数字+アンダースコアは常に一貫して機能します。

他の場所で述べたように、リレーション(テーブル)名は単数である必要があります:http//www.teamten.com/lawrence/programming/use-singular-nouns-for-database-table-names.html


私は同意します-アンダースコアは、パスカルやキャメルケースと比較して問題が最も少ないです。特に、名前を付けるときは、モデル、dto、および最後にフロントエンドに移動します。
Saulius 2017年

6

私は、使用している言語の規則に依存すると言う人々に同意する傾向があります(たとえば、C#の場合はPascalCase、Rubyの場合はsnake_case)。

ただし、キャメルケースは使用しないでください。


2
Ada:Pascal_Case_With_Underscores
uetoyo

6
これは、命名規則が異なる2つの異なる言語で同じテーブルにアクセスする場合には意味がありません。
ダニエルW.

5

他の多くの意見を読んだ後、言語の命名規則を使用することが非常に重要だと思います。アプリケーションの唯一の開発者である(そしてそうなる)場合にのみ、命名規則よりも一貫性が重要です。読みやすさ(これは非常に重要です)が必要な場合は、各言語の命名規則を使用することをお勧めします。たとえばMySQLでは、すべてのプラットフォームで大文字と小文字が区別されるわけではないため、CamelCaseの使用はお勧めしません。したがって、ここではアンダースコアが良くなります。


1
全く同感であります!!!特にMySqlをWindowsで実行すると、すべてがからにcamelCaseなりcamelcaseます。したがって、スネークケースを持っている方がはるかに優れています。また、Modern software however supports any kind of naming schemeあなたについては、yopが最後のバージョンのソフトのコードを書く保証はありません。特にデータベースの場合、回帰コストについて考えると、バージョンの更新は簡単ではありません。
チェリー

2

これらは私の5セントです。異なるベンダーのDBを1つのプロジェクトに使用する場合、2つの最良の方法があるという結論に達しました。

  1. アンダースコアを使用します。
  2. 引用符付きのキャメルケースを使用してください。

その理由は、一部のデータベースはすべての文字を大文字に変換し、一部は小文字に変換するためです。ですから、もしあなたがmyTableそれを持っているなら、それはいつになるMYTABLEmytable、いつあなたはDBで働くでしょう。


1

残念ながら、この質問に対する「最良の」答えはありません。@Davidが述べたように、一貫性は命名規則よりもはるかに重要です。


1

単語の区切り方にはさまざまなバリエーションがあるため、好きなものを選ぶ必要があります。しかし同時に、テーブル名は単数である必要があるというコンセンサスが近いようです。


1

命名規則は言語のスコープ内に存在し、言語が異なれば命名規則も異なります。

SQLはデフォルトで大文字と小文字を区別しません。したがって、snake_caseは広く使用されている規則です。SQLは、区切られた識別子もサポートしています。したがって、キャメルケース(Java、フィールド==列)やPascalCase(C#、テーブル==クラスおよび列==フィールド)のように、オプションに大文字と小文字が混在しています。DBエンジンがSQL標準をサポートできない場合、それが問題です。あなたはそれと一緒に暮らすか、別のエンジンを選ぶかを決めることができます。(そして、C#が異なる必要がある理由は、両方でコーディングする私たちにとっては悪化のポイントです。)

サービスとアプリケーションで1つの言語のみを使用する場合は、すべてのレイヤーでその言語の規則を使用してください。それ以外の場合は、その言語が使用されているドメインで最も広く使用されている言語の規則を使用します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.