テーブル命名のジレンマ:単数名と複数名の比較[終了]


1466

アカデミアでは、テーブル名は属性を格納するエンティティの単数形である必要があるとしています。

名前の前後に角かっこが必要なT-SQLは嫌いですが、Usersテーブルの名前を単数形に変更しました。

私の直感は、単数形にとどまる方が正しいということですが、私の直感は、括弧がスペースを含む列名などの望ましくないものを示していることでもあります。

私は滞在するべきですか、それとも行くべきですか?


以前のデータベーステーブルの名前は複数形または単数形で重複していますが、これはより注目されました。
outis

7
多くの人が言っていないことに驚いています。それは、単一の行が何を表すかによって決まります。単一のデータベースでは、行が単一のウィジェットを表すテーブルと、そのテーブルとの1対多の関係を持つ別のテーブルが、行が多くのウィジェットを表すことを意味します。これを行わないと、表現力が失われます。
アンディガビン2015

1
これらすべてのディスカッションでそれを追加したいだけです。テーブルがクラスと同じように形成または形成されるわけではないことに注意してください。テーブルは、特定のタイプの要素のコレクションであり、個々のプロパティでソート、クエリなどを実行できます。クラスは、特定のタイプのプロパティと動作を記述するフレームワークです。オブジェクト指向のコーディング用語では、テーブルのクローズ表現はオブジェクトのコレクションです(使用しているORMに関係なく)。これは、このテーマで群を抜いて最も高いgoogle回答であるため、質問は締め切られましたが、ページにはまだ価値があります。

1
私はあなたが働いているエコシステムの一般的な慣行に行きます。例えば:Node.jsでは、Bookshelf.jsやObjection.jsのようなORMは主に「Knex.js」に基づいています。また、「Knex.js」のドキュメントには、複数のテーブル名が含まれています。だから私はそのドメインで複数に行くでしょう。出典:knexjs.org/#Schema-createTable
Benny Neugebauer

2
はい私は同意する。これにより、ユーザーのテーブルを持って、それはまた、ユーザの特定のタイプに適用される規則のテーブルを持っており、「UserRules」それを呼び出すために理にかなっていると同時に、「APPUSER」それを呼び出すことは理にかなって
Arindam

回答:


242

他の人は「標準」まではかなり良い答えを出しましたが、私はこれを追加したいだけです...「ユーザー」(または「ユーザー」)が実際にテーブルに保持されているデータの完全な説明ではない可能性はありますか?テーブル名と具体性に夢中になるべきではありませんが、おそらく「Widget_Users」(「Widget」はアプリケーションまたはウェブサイトの名前です)のようなものがより適切でしょう。


7
同意する。OrgUsers、AppUsers、キーワードの使用を避けるためのもの。
MikeW 2009年

7
-1。テーブルユーザー(および国、言語)は、いくつかのアプリケーションで同時に使用できます。
OZ_ 2011

129
スキーマ名を関連付けると混乱がすべて解消されませんか?AppName1.Users、AppName2.Users?
Zoは

7
テーブルのプレフィックスに同意しません-おそらくスキーマでしょうか?-しかし、「よりわかりやすい名前」に同意します。名前空間の議論全体を入力することなく、「AppUser」のような単純なもので十分です。

7
この受け入れられた答えは副次的なコメントであり、質問には答えません。
Viliami 2017年

1825

私は同じ質問をしました、そしてここですべての答えを読んだ後、私は間違いなくSINGULARにとどまります、理由:

理由1(概念)。「AppleBag」のようなリンゴを含むバッグを考えることができます。0、1、または100万個のリンゴを含むかどうかは関係ありません。常に同じバッグです。テーブルはそれだけです。コンテナでは、テーブル名はテーブルに含まれるデータの量ではなく、テーブルに含まれるものを記述する必要があります。さらに、複数形の概念は、話し言葉の言語に関するものです(実際に1つ以上あるかどうかを判断するため)。

理由2。(便利)。複数の名前よりも単数の名前の方が簡単です。オブジェクトは不規則な複数形でも複数形でもかまいませんが、常に単数形になります(ニュースのような例外はほとんどありません)。

  • お客様
  • 注文
  • ユーザー
  • 状態
  • ニュース

理由3。(美的および秩序)。特にマスター/ディテールシナリオでは、これは読みやすく、名前でより適切に整列し、より論理的な順序になります(マスターが最初、ディテールが2番目)。

  • 1.ご注文
  • 2.OrderDetail

に比べ:

  • 1.OrderDetails
  • 2.ご注文

理由4(単純さ)。すべてをまとめると、テーブル名、主キー、リレーションシップ、エンティティクラス...は、2つではなく1つ(単数)の名前(単数)、複数のテーブル、単数フィールド、単数-複数のマスター詳細などを認識する方が適切です。 。)

  • Customer
  • Customer.CustomerID
  • CustomerAddress
  • public Class Customer {...}
  • SELECT FROM Customer WHERE CustomerID = 100

「顧客」を扱っていることがわかったら、データベースとのやり取りのすべてのニーズに同じ単語を使用することができます。

理由5。(グローバリゼーション)。世界はますます小さくなっています。皆さんはさまざまな国籍のチームを抱えている可能性があります。英語を母国語としないプログラマは、「リポジトリ」よりも「リポジトリ」、または「ステータス」の代わりに「ステータス」を考える方が簡単でしょう。名前が単数であることにより、タイプミスによるエラーが減り、「子供か子供か」を考える必要がないため時間を節約でき、生産性が向上します。

理由6。(何故なの?)。書き込み時間を節約し、ディスク領域を節約し、コンピューターのキーボードを長持ちさせることさえできます!

  • SELECT Customer.CustomerName FROM Customer WHERE Customer.CustomerID = 100
  • SELECT Customers.CustomerName FROM Customers WHERE Customers.CustomerID = 100

3つの文字、3バイト、3つの追加キーボードヒットを保存しました:)

そして最後に、次のような予約済みの名前をいじって、それらに名前を付けることができます。

  • ユーザー> LoginUser、AppUser、SystemUser、CMSUser、...

または、悪名高い角括弧を使用します[ユーザー]


625
靴下の引き出しに「ソックス」と呼ばれるラベルを付けたら、きっと間違いないでしょう。
クリスウォード

73
はっきりと。すべての人とすべての人に役立つ標準を1つ取得するのは困難です。重要なのは、それがあなたに役立つことです。これは私にとってはうまくいきます。ここでは理由を説明しましたが、これも私にとってはとても便利なことです。
Nestor

451
より大きな質問クリスは、なぜ靴下ドロワーに名前を付けるときにデータベースの命名規則に従うのですか?
カイルクレッグ

83
この答えにはもっと賞賛が必要です。それは、私が単数形の名前を好む理由に私が適用する多くの実用的な理由を説明しています。セットに関連する適切な言語に関する代替の議論は、単なる哲学的であり、本当の意味を曖昧にしています。Singularはよりよく機能します。
Jason

298
自宅に「靴下」の引き出しがあり、「靴下」の引き出しはありません。データベースの場合は、「Sock」テーブルと呼びます。
jlembke 2013

260

オブジェクトリレーショナルマッピングツールを使用する場合、または将来使用する場合は、Singularをお勧めします。

LLBLGenのような一部のツールでは、テーブル名自体を変更せずに、Users to Userなどの複数名を自動的に修正できます。なぜこれが問題なのですか?それはマップされたとき、Users.NameではなくUser.Nameのように見えるようにしたい、またはコードで混乱しているtblUsers.strNameを命名している私の古いデータベーステーブルのいくつかから悪いことに。

新しい経験則は、オブジェクトに変換された後の外観を判断することです。

私が見つけた1つのテーブルは、私が使用する新しい命名に適合しないものは、UsersInRolesです。ただし、常にいくつかの例外があり、この場合でも、UsersInRoles.Usernameのように見えます。


48
私は反対票を投じました。反対するので、その理由をお話しします。ORMの本質はマッピングです。これまでに使用したすべてのORMツールは、エンティティの名前とは異なる場合に、エンティティに使用するテーブル名の指定をサポートしています。リレーショナルデータベースにマップする理由は、オブジェクトモデルとは異なる形状のアドホッククエリとレポートを簡単に作成できるようにするためです。それ以外の場合は、オブジェクト/ドキュメントデータベースを使用しているだけです。
joshperry 2010

25
ORMは、マップするオブジェクトの名前を指示するべきではありません。ORMのポイントはオブジェクトの抽象化であり、この柔軟性を付与します。
バリーピッカー2011

19
私の世界では、プロジェクト全体で一貫した名前を使用して、このインスタンスの最後にsがあるかどうか疑問に思って時間を無駄にしないようにしています。ORM 名前を変更して独立できるという事実は、名前を変更することが仲間の開発者を助けることを意味しません。
John Nicholas

2
一部のORM(多くのプログラミングツールと同様)には、構成なしで実装を生成するデフォルトの動作があります...生産性のセールスポイント。したがって、明示的なマッピングなしでEmployeeクラスを作成すると、デフォルトでEmployeeテーブルが生成されます
user919426

1
@barrypicker。複数の名前は、ORMコードで単純に見えるだけではありません。特に一意の属性を参照する場合、SQLでも複数形は見栄えが悪くなります。ユーザーからselect user.idを記述したことがないのは誰ですか?または、おそらく...ユーザーがthingy.user_id = user.id ...に参加したままになっていますか?
Samuel Danielson

219

私は、英語では単数形のたわまない名詞を使用することを好みます。

他の多くの回答が示すように、テーブル名の数に影響を与えると、正字法の問題が発生しますが、通常はテーブルに複数の行が含まれるため、意味的に穴があふれるため、そうすることを選択します。これは、(ほとんどの場合のように)格に基づいて名詞を活用する言語を考えると、より明白になります。

私たちは通常、行を使って何かをしているので、なぜその名前を非難的なケースに入れませんか?読み取る以上に書き込むテーブルがある場合は、名前をdativeに入れてみませんか?それ何かの表です、属格を使ってみませんか?テーブルは、その状態や使用方法に関係なく存在する抽象コンテナーとして定義されているため、これは行いません。正確で絶対的な意味論的理由なしに名詞を活用することは、せせらぎです。

反映されていない名詞の使用は、単純で論理的で、規則的で言語に依存しません。


37
おそらく、私が今まで見たこの主題について最も論理的な議論であり、その時間をラテン語に費やしてよかったと思う。確かに+1。

52
ええと、私は明らかに語彙を強化する必要があります。
TJビドル2013年

19
+1参照してください、これらはインターネットがもっと必要とする種類の答えです。豊富な語彙を使用して完璧なロジックを実行する完璧な証明。
OCDev 2013年

8
次回ラテン語でプログラミングするときに、このことに注意します。その間、ユーザーはusersテーブルに、顧客はCustomersテーブルに移動します。
Caltor

8
納得–影響を受けていない。結局のところ、興味深いことに、「単数」と「複数」の一般的な選択はどちらも間違っています。
スチュアート

126

テーブルに単一の名前を付ける必要があるのはどの規則ですか?いつも複数の名前だと思っていました。

ユーザーが「ユーザー」テーブルに追加されます。

このサイトは同意します:http :
//vyaskn.tripod.com/object_naming.htm#Tables

このサイトは同意しません(ただし、同意しません):http :
//justinsomnia.org/writings/naming_conventions.html


他の人が述べたように:これらは単なるガイドラインです。あなたとあなたの会社/プロジェクトのために働く慣習を選んで、それに従ってください。単数形と複数形、時には省略形の単語を切り替えることも、そうでない場合もあります。


46
セット理論をテーブルに適用すると、セット内のすべてのインスタンスはセットを表すため、AppleはAppleセットであり、セット内のリンゴの数にとらわれず、多くのインスタンスを持つAppleです。リンゴの「袋」は、リンゴがたくさん入っていると「袋」にはなりません。
ProfK 2008

89
中にリンゴが5個入ったバッグがあるとしたらどうでしょう。あなたはそれをリンゴの袋と呼びますか?またはリンゴの袋?
クリストファーマハン

26
理論は、セットがりんごという名前であると思うでしょう。単数形のリンゴは「リンゴのセット」ですが、単一のインスタンスを持つセットです。複数のリンゴも「リンゴのセット」です。
Mark Brackett

26
@Christopher、バッグの存在理由がリンゴとリンゴのみを保持することである場合、リンゴ1個、リンゴ100個、またはリンゴなしのいずれであるかに関係なく、「リンゴバッグ」です。
Ian Mackinnon

14
@ Ian:これは、テーブルが汎用的であり、輸送用コンテナと比較できるためです(アップルクレートからハーレーデビッドソンバイクのクレートまで、ほぼすべてを含めることができます)。あなたは言う:オレンジの貨物コンテナではなく、オレンジの貨物コンテナ。あなたは言う:自動車部品の貨物コンテナではなく、自動車部品の貨物コンテナ。リンゴの名前など、特定のタイプのデータのみを保持するためのカスタムデータ構造を作成し、それに「kungabogo」という名前を付けた場合、リンゴのクンガボコを作成できます。私はあなたの考えを知っていますが、最初にボールの袋を考え、意味の違いを理解します。
クリストファーマハン

79

簡単な例としてこれはどうですか:

SELECT Customer.Name, Customer.Address FROM Customer WHERE Customer.Name > "def"

SELECT Customers.Name, Customers.Address FROM Customers WHERE Customers.Name > "def"

後者のSQLは前者よりも奇妙に聞こえます。

単数に投票します。


50
その例では、はい、しかし実際的なSQLでは、そのように記述されることは決してありません。テーブルのエイリアスがあるので、もっと似ていますSELECT C.Name, C.Address FROM Customers WHERE Customers.Name > 'def'
マイケルハーレン

+1、(1年後)あなたは、単数形がどのように意味をなすかについてTERRIFICの例を引用しました。これは幾分宗教的な議論です。私は何年か前に、何年も前にデータアーキテクトによって私の特別な人に向かったのですが、私のシニアは何年も前のことでした。
Chris Adragna

24
SQLは複数形のほうがいいようです。各列にテーブル名はありませんが、なぜそんなに入力するのが好きですか。SELECT Name、Address FROM Customers WHERE Name> "def"顧客のプールから、名前がdefよりも大きい場所を選択しています。
Jamiegs、2011

6
その1つの問題を回避するためにエイリアス/ ASを使用するのはどうですか?SELECT Customer.Name、Customer.Address FROM Customers AS Customer WHERE Customer.Name> "def"
James Hughes

1
2つ目は、英語が話せない人のように聞こえます。
HLGEM 2013

61

エンティティリレーションシップダイアグラムでは、エンティティはクラス名が単数形であるのと同様に、単数形の名前で反映されるべきであると私は確信しています。インスタンス化されると、名前はそのインスタンスを反映します。したがって、データベースでは、テーブル(エンティティまたはレコードのコレクション)にしたときのエンティティは複数になります。エンティティ、ユーザーはテーブルユーザーになります。Userという名前をEmployeeまたはあなたのシナリオにより適切なものに改善できると示唆した他の人にも同意します。

レコードのグループから選択しているので、SQLステートメントではこれはより理にかなっており、テーブル名が単数形の場合、うまく読み取れません。


3
特にSQLステートメントのコメントが好きです。ここで単数形を使用することは、読者にとって直感的には感じられません。
hochl

2
ERDの優れた点。これが、DBAの目を通して世界を見る人にとって、単数の命名が理にかなっている理由だと思います。あなたが指摘するように、それらはエンティティとそれらのコレクションとの違いを理解していないと思います。
ウィリアムT.マラード2014年

1
テーブルはレコードのコレクションではありません。テーブルは、レコードがどのように見えるかの定義です。それは、複数/単数の人々が持っているように見えるすべての切断です。
リッチリマー2016

SQLステートメントのコメントに同意しません。Users.Idに対して参加したい場合
ハッシュテーブル

1
1つのold_ladyに多くの猫がいる、またはold_ladiesに猫がいる。ERDは複数としてより読みやすいと思います。エンティティのテーブル、テーブルには多くのエンティティがあるので、複数形はいい音だと思います。
user3121518

39

テーブル名やプログラミングエンティティは単数形にします。

理由?マウス⇒マウスヒツジ⇒ヒツジのように英語には不規則な複数形があること。次に、コレクションが必要な場合は、マウスまたは羊を使用して次に進みます。

これは本当に複数が目立つのを助けます、そして私は物事のコレクションがどのように見えるかを簡単かつプログラム的に決定することができます。

つまり、私のルールは、すべてが単数であり、すべてのコレクションがsを付加した単数であるということです。ORMにも役立ちます。


7
「s」で終わる単語はどうですか?(例として)「ニュース」というテーブルがある場合、ニュースのコレクションを何と呼びますか?ニュース?または、テーブルを「新規」と呼びますか?
アンソニー

18
テーブルNewsItemとコレクションNewsItemsを呼び出します。
アッシュマシン

5
すべてのコードをスペルチェックする必要がある場合、またはコンパイルされない場合はどうでしょう;)?
Hamish Grubijan

2
ORMは、マップするオブジェクトの名前を指示するべきではありません。ORMのポイントはオブジェクトの抽象化であり、この柔軟性を付与します。
バリーピッカー2011

16
@HamishGrubijanは、Wordを使用してコードを記述しないでください。;)
Valentino Vranken

36

私見、テーブル名はCustomersのように複数形にする必要があります。

Customersテーブルの行にマップする場合、クラス名はCustomerのように単数である必要があります。


33

特異な。どちらが最も論理的であるかという議論は購入しません。誰もが自分の好みが最も論理的だと思っています。あなたが何をしてもそれは混乱です、ただ慣習を選んでそれに固執してください。私たちは、非常に不規則な文法とセマンティクス(通常の話し言葉および書き言葉)を持つ言語を、非常に特殊なセマンティクスを持つ非常に規則的な(SQL)文法にマッピングしようとしています。

私の主な主張は、テーブルをセットとしてではなく、関係として考えることです。

したがって、AppUser関係はどのエンティティがであるかを示しAppUsersます。

このAppUserGroup関係から、どのエンティティがAppUserGroups

AppUser_AppUserGroup関係はどのように私に語ったAppUsersAppUserGroups関係しています。

AppUserGroup_AppUserGroup関係はどのように私に語ったAppUserGroupsし、AppUserGroups(グループのすなわちグループメンバー)に関連しています。

つまり、エンティティとそれらの関係を考えるとき、私は関係を単数で考えますが、コレクションまたはセットのエンティティを考えるとき、コレクションまたはセットは複数です。

私のコードでは、データベーススキーマでは、単数形を使用しています。テキストの説明では、読みやすさを高めるために複数形を使用します。フォントなどを使用して、テーブル/リレーション名を複数形と区別します。

私はそれを散らかったものとして考えるのが好きですが、体系的です-このように、私が表現したい関係には常に体系的に生成された名前があり、それは私にとって非常に重要です。


1
丁度。多くの人々がここで気づいていない主なことは、彼らが何を命名しているのかです...テーブルのレコードのセットではなく、関係(テーブルの単一のレコード)に名前を付けています。
Alexandre Martini 14

3
これ以上反対することはできませんでした。「名前が「J」で始まるすべてのユーザーを選択しているため、「*からユーザー名が「J%」のような*を選択します。引数に「... where User.Name like ...」と記述したい場合は、単にエイリアスを使用します。同じ理由で、「入手可能なすべての靴下から1足プレゼントしてください」と言います。
マークA.ドノホー、2015

私がその特定だった場合、私のテーブル名はsock_pairになります
Manuel Hernandez

@AlexandreMartiniそのとおりです。テーブル内の単一のレコードを 「関係」と呼ぶ人のように。
ヌーノアンドレ

31

私は複数形使用します。前述のユーザーのジレンマでは、角かっこアプローチを採用します。

私たちは、という基本を理解した上で、データベースアーキテクチャとアプリケーションアーキテクチャの両方の間の均一性を提供するために、これを行うユーザーテーブルがの集まりであるユーザーな限り数値ユーザーコードアーティファクトに収集することの集まりであるユーザーオブジェクト。

データチームと開発者が同じ概念言語を話す(常に同じオブジェクト名であるとは限りません)ことで、それらの間でアイデアを伝達しやすくなります。


8
同意する..なぜコードとストレージの間の不整合なのか?コードでユーザーオブジェクトのコレクションに "User"という名前を付けることはありません...では、なぜテーブルを呼び出すのでしょうか。意味がない。私がそれについて上記の議論を読むとき、彼らはテーブルではなくエンティティに焦点を合わせています...私の心の中で、テーブル自体とテーブルの内容の間には違いがあります。
Jason

companies他のテーブルに呼ばれる参照フィールドがあるようなテーブル名をどのように扱いcompany_idますか?スペルは適切ですが、テーブルの命名規則にこだわっている人には一貫性がないようです。
Jake Wilson

1
の単数形companiescompanyであり、このIDは単数形の項目への参照であることを思い出してください。それは私たちがコードで私たちを煩わせるべきではありません。
デビッド

22

私は個人的には、セットを表すために複数の名前を使用することを好みます。それは、私の関係の心にとっては単に「音」に優れています。

この時点で、私は会社のデータモデルを定義するために単数形の名前を使用しています。これは、職場のほとんどの人がそれに慣れているからです。時には、個人的な好みを課すのではなく、誰もが簡単に生活できるようにしなければなりません。(それが私がこのスレッドで終わった方法であり、テーブルに名前を付けるための「ベストプラクティス」とは何かを確認するためです)

このスレッドでの議論をすべて読んだ後、私は1つの結論に達しました:

みんなの好きな味が何であれ、私は蜂蜜入りのパンケーキが好きです。しかし、私が他の人のために料理をしているのなら、私は彼らに彼らが好きなものを提供しようと努めます。


リレーショナルモデルの世界でこのような規則を使用するのは賢明ではありません。特に、オブジェクト間の関係を説明する場合、たとえば、「各チームには1つのメインコーチと多​​くのセカンダリコーチしか存在しない可能性があります」と説明されています。 SecondaryCoach
noonex

16

特異な。ユーザー行表現オブジェクトの束を含む配列を「ユーザー」と呼びますが、テーブルは「ユーザーテーブル」です。テーブルを、それが含む行のセットにすぎないと考えるのは間違っています、IMO。テーブルはメタデータであり、行のセットはテーブルに階層的にアタッチされています。これはテーブル自体ではありません。

もちろん、私は常にORMを使用しており、複数のテーブル名で記述されたORMコードが愚かに見えるのを助けます。


彼一人一人に、私は推測します。リレーショナルデータベーステーブルは、定義上、見出し(つまり、属性に名前を付けるメタデータ)であり、見出しに一致するタプルのセットです。メタデータに焦点を当てることができますが、他の人々はタプルに焦点を当てています。:-)
ビルカーウィン

こんにちは、User_Tableは私が好きな名前です!:)
カミロマーティン

3
ORMは、マップするオブジェクトの名前を指示するべきではありません。ORMのポイントはオブジェクトの抽象化であり、この柔軟性を付与します。
バリーピッカー2011

1
私はそれをこのように見ています..コードで何かの配列/リスト/辞書を作成する場合、私の賭けは、それが保持するものの複数形の名前でそれに名前を付けることです。ORMを使用してデータベースを抽象化している場合、テーブルはある種のコレクションで表されるので、なぜそれらを異なるものとして扱うのですか?単数形の名前を使用することは良いように聞こえるかもしれませんが、コードのコレクションと同じように、テーブルが同じものの多くを保持するという本能と常に戦っています。なぜ矛盾があるのですか?
Jason

@Jason:これらの事を読ん道比較対照してください:1) $db->user->row(27)$db->product->rows->where(something) 2) 、。$db->users->row(27) $db->products->rows->where(something)
2012年

16

私は実際には、複数のテーブル名を使用することが一般的な慣習であるといつも思っていました。ここまでは常に複数を使用してきました。

単数形のテーブル名の引数は理解できますが、複数形の方が理にかなっています。テーブル名は通常、テーブルの内容を示しています。正規化されたデータベースでは、各テーブルに特定のデータセットが含まれています。各行はエンティティであり、テーブルには多くのエンティティが含まれています。したがって、テーブル名の複数形。

車のテーブルには名前の車があり、各行は車です。フィールドと一緒にテーブルを指定するのtable.fieldがベストプラクティスであり、単一のテーブル名を使用する方が読みやすいことを認めます。ただし、次の2つの例では、前者の方が意味があります。

SELECT * FROM cars WHERE color='blue'
SELECT * FROM car WHERE color='blue'

正直なところ、私はこの問題について自分の立場を考え直し、私が開発している組織で使用されている実際の規約に依存します。ただし、個人的な慣習として、複数のテーブル名を使用することにします。私にはもっと理にかなっています。


9
これもRoRでの慣例ではないですか?テーブルの複数の名前とORMクラスの単数形?私にはとても理にかなっています。テーブルは、「car」のインスタンスが多いため「cars」と呼ばれ、クラスは「car」と呼ばれます。
サップ

@Sap文の後の部分のマイナーな修正-クラス「Car」は、実際の車を表す抽象データ型です。1つまたは複数のインスタンスを保持するかどうかは、その使用方法によって異なります。
2016年

それに直面してみましょう、テーブルcarは1台の車の構造の定義です。テーブルの構造を見ると、基本的には「id int、color string etc」がさらに出力されます。たとえば、外部キーを持つテーブルcar_vendor(または複数形バージョンの場合cars_vendor)があるとしcars_idましょう。その愚かなたわごとは何ですか?car_id 私に考えさせる必要はありません。私はSingularを強く好んでいます
Toskan 2017年

4
私はこの答えが本当に好きです!説明させてください。コレクションがある場合はcar、あなたが望むすべてのものからcarであるblue結果のようなものでなければなりませんtire, mirror, engine。そして、すべての結果がpartsからのものであるため、混乱が生じていcarます。したがって、テーブル名はcarparts(またはcar_partsCarParts好きなように)にする必要があります
arnoudhgz 2017年

単一のテーブル名を適用するデータベース設計者は基本的に、将来そのデータベースに接触する可能性があるRuby on Railsアプリ開発者に対する戦争を宣言しています。Railsはクラスの単数形の単語とテーブルの複数形の名前に厳密にこだわっており、Rubyのエコシステム内の多くのgem内で多くの強力な動作を可能にします。したがって、単数の方が良いと思う場合でも、互換性のために複数に固執する必要があります。これは他の多くのオブジェクトリレーショナルマッパーにも当てはまると思います。
Kelsey Hannan

15

英語の一部の名詞は数えられない(水、スープ、現金)か、数えられるようにすると意味が変わる(チキンvsチキン、肉vs鳥)ので、複数のテーブル名は好きではありません。また、テーブル名または列名に略語を使用することは、既に急な学習曲線に勾配を追加するため、嫌いです。

皮肉にも、USER(Transac-SQL)が原因でUser例外を作成して呼び出す可能性があります。必要がない場合は、テーブルの前後に角かっこを使用したくないからです。Users

また、すべてのID列の名前をIdChickenIdまたはにしChickensIdたいと思います(これについて複数の人が何をするのですか?)。

これはすべて、データベースシステムを適切に尊重していないためです。私は、Javaの癖や怠惰などのOO命名規則からのワントリックポニーの知識を再利用しています。複雑なSQLのためのより良いIDEサポートがあればいいのに。


8
私たちの複数形の人は、あなたのように「id」列に「id」という名前を付けるか、「singular_id」という名前を付けます。テーブルは複数(配列のように考える)である必要があると思いますが、列名は単数(単一の要素の属性)である必要があります。
mpen 2009

テーブル名の場合はplu_ral / PluRal、主キーの場合はsingular_id / singularId。
ホッホ

14

私たちは同様の標準を実行します。スクリプトを作成するとき、名前の周りに[]を要求し、適切な場合はスキーマ修飾子を使用します。

SELECT [Name] FROM [dbo].[Customer] WHERE [Location] = 'WA'

これにより、過去に私たちの魂が救われました-一部のデータベースシステムは、SQL 6.0からSQL 2005まで10年以上稼働しています-意図した寿命をはるかに超えています。


儀式的な自己鞭打ちのようです。そのような名前の取得はまだ起こっていますか?
Kjetil S.

13

テーブル:複数

usersテーブルには複数のユーザーがリストされています。

モデル:単数

usersテーブルから単一のユーザーを選択できます。

コントローラ:複数

http://myapp.com/usersは複数のユーザーをリストします。

とにかくそれは私の考えです。


1
私の意見に近いですが、私の考えでは、複数のユーザーのテーブルのストレージは実際には付随的であり、単一のユーザーはすべてテーブルによって表されます。つまり、ユーザーエンティティを表すタプルのセットであるリレーションです。
ProfK 2009年

私はこれに同意する傾向があると思います。私を混乱させる唯一のことは、なぜモデルが特異であるべきなのか?モデルが単一のユーザーのみに関係している場合のみ。すべてのユーザーを取得するためにデータベースにクエリを実行している場合、モデルにアクセスする必要がありますか?単一のインスタンスがすべてのレコードをフェッチするのは意味がありません。例:$ user-> get_all()//意味がありません
PM7Temp

12

CASE構文を使用してERダイアグラムを読みやすくするため、私は単一のテーブル名のファンですが、これらの応答を読むことで、あまりうまく捉えられていないような感じがしますか?個人的には大好きです。単数形のテーブル名を使用し、関係にアクション動詞を追加し、すべての関係に対して適切な文を作成する場合のモデルの読みやすさの例を含む概要があります。20テーブルデータベースの場合は少しやり過ぎですが、数百のテーブルと複雑な設計を備えたDBがある場合、開発者は読みやすい図なしでそれを理解するにはどうすればよいでしょうか。

http://www.aisintl.com/case/method.html

テーブルとビューにプレフィックスを付けることに関しては、私はその実践を絶対に嫌います。おそらく悪い情報を与える前に、人に情報をまったく与えないでください。オブジェクトのデータベースを参照している人は誰でもビューからテーブルを簡単に見分けることができますが、tblUsersという名前のテーブルがある場合、何らかの理由で将来的に2つのテーブルに再構成することにし、ビューを統合して古いコードを壊さないようにしますこれで、tblUsersという名前のビューができました。この時点で、2つの魅力的なオプションが残っています。tblプレフィックスを付けた名前のビューを残すと、一部の開発者を混乱させる可能性があります。または、新しい構造またはviewUsersという名前を参照するように、中間層またはアプリケーションの別のレイヤーを強制的に書き換えます。これは、ビューIMHOの価値の大部分を無効にします。


1
'type'修飾子をオブジェクト名の前に付けることの落とし穴の良い例!
Kenny Evitt、2010年

12

システムtables/viewsサーバ自体の(SYSCAT.TABLESdbo.sysindexesALL_TABLESinformation_schema.columns、など)はほとんど常に複数です。一貫性のために、私は彼らの先導に従うと思います。


Microsoftは、ビジネス上の理由から(そして、多くの場合、非倫理的な理由から)、論理的な理由が最後です。彼らをフォローする私の唯一の理由は、彼らが大きなゴリラであり、他の誰もがそのように行くということでしょう。選択の余地がある場合、私は別の方法を選択します。
Bruce Patin

1
information_schemaは、SQL標準であるISO / IEC 9075-11の一部であることに注意してください。そして、はい、複数のテーブル/ビュー名を使用します。
パウロフレイタス

10

MS SQL Server'sシステムテーブルを見ると、Microsoftによって割り当てられた名前がにありpluralます。

Oracleのシステムテーブルの名前はにありsingularます。それらのいくつかは複数ですが。ユーザー定義の表名には複数形をお薦めします。それは彼らがあることを推奨し、別のものに従うことはあまり意味がありません。これらの2つのソフトウェアジャイアントのアーキテクトが異なる規則を使用してテーブルに名前を付けたことは、あまり意味がありません...結局のところ、これらの連中は何ですか...博士

私は学界で覚えています、推薦は単数でした。

たとえば、次のように言うと、

select OrderHeader.ID FROM OrderHeader WHERE OrderHeader.Reference = 'ABC123'

多分b / cそれぞれIDが特定の単一の行から選択されます...?


1
Microsoftは、ビジネス上の理由から(そして、非倫理的な理由から)最初に存在し、論理的な理由が最後です。彼らをフォローする私の唯一の理由は、彼らが大きなゴリラであり、他の誰もがそのように行くということでしょう。選択の余地がある場合、私は別の方法を選択します。
Bruce Patin、

2つのこと。1つは、通常はテーブル名を使用せず、 'select ID FROM OrderHeaders WHERE Reference =' ABC123 'と書くことになる。結合またはその他、次のようなエイリアスを使用します... 'select OrderHeader.ID FROM OrderHeaders as OrderHeader WHERE OrderHeader.Reference =' ABC123 '
Mark A. Donohoe

9

これは少し冗長かもしれませんが、注意することをお勧めします。テーブルの名前を変更することは必ずしも悪いことではありませんが、標準化はそれだけです。標準-このデータベースはすでに「標準化」されている可能性がありますが、ひどく:)-このデータベースがすでに存在し、おそらく2つ以上のテーブルで構成されていることを考えると、一貫性をより良い目標にすることをお勧めします。

データベース全体を標準化できない場合、または少なくともその目的に向かって作業することを計画している場合を除いて、テーブル名は氷山の一角にすぎず、手元のタスクに集中して、名前の悪いオブジェクトの苦痛に耐えているのではないかと思いますあなたの最善の利益-

実用的な一貫性が最高の基準になることもあります... :)

my2cents ---


9

可能な選択肢:

  • テーブルの名前をSystemUserに変更します。
  • ブラケットを使用する
  • 複数のテーブル名を保持します。

ブラケットを使用したIMOは、技術的に最も安全な方法ですが、少し面倒です。IMOは6の1つ、他の6ダースであり、ソリューションは実際には個人/チームの好みに要約されます。


2
私はあなたの「プレフィックス」のアイデアが好きですが、それをSystemUserと呼びます。
ProfK 2008

9

私の見解は、コンテナーの定義方法に応じてセマンティクスにあります。たとえば、「りんごの袋」または単に「りんご」または「りんごの袋」または「りんご」。

例:「大学」の表には0以上の大学を含めることができます「大学」の表には0以上の大学を含めることができます

a "student" table can contain 0 or more students 
a table of "students" can contain 0 or more students.

私の結論は、どちらでも問題ないということですが、テーブルを参照するときに、自分(またはそれと対話する人々)がどのようにアプローチするかを定義する必要があります。「axテーブル」または「xsのテーブル」


8

他の人がここで述べたように、慣習は使いやすさと読みやすさを増すためのツールであるべきです。開発者を拷問するための束縛やクラブとしてではありません。

とはいえ、私の個人的な好みは、テーブルと列の両方に単一の名前を使用することです。これはおそらく私のプログラミングの背景によるものです。クラス名は、何らかのコレクションでない限り、通常は単数形です。私の考えでは、問題のテーブルの個々のレコードを格納したり読み取ったりしているので、単数形は理にかなっています。

この方法により、オブジェクト間の多対多の関係を格納するテーブル名に複数のテーブル名を予約することもできます。

テーブルと列の名前にも予約語を使用しないようにしています。ここで問題となっているケースでは、ユーザーの予約語を使用するテーブルをカプセル化する必要を回避するために、ユーザーの単一の規則に対抗する方が理にかなっています。

プレフィックスを限られた方法で使用するのが好きです(テーブル名にはtbl、プロシージャ名にはsp_など)。また、名前を入力するときは常に_ではなく+を押すため、アンダースコアよりもCamelBackの名前を優先します。他の多くは同意しない。

命名規則のガイドラインに役立つ別のリンクを次に示します。http//www.xaprb.com/blog/2008/10/26/the-power-of-a-good-sql-naming-convention/

規約で最も重要な要素は、問題のデータベースを操作する人々にとって意味があるということです。命名規則に関しては、「すべてを統括する1つのリング」はありません。


18
ハンガリー語表記の恐怖を無視します。MS-SQLはシステムストアドプロシージャにsp_を使用し、それを特別に扱うため、ストアドプロシージャの前で決してsp_を使用しないでください。sp_はマスターテーブルに格納されているため、場所を指定しても、MS-SQLは常に最初に検索します。
Will Dieterich、

8

単数形を使うことは、私たちが大学で教えたものだと思います。しかし同時に、オブジェクト指向プログラミングとは異なり、テーブルはレコードのインスタンスではないと主張することもできます。

英語の不規則性が複数あるため、現時点では単数形を支持していると思います。ドイツ語では、一貫した複数形がないためにさらに悪化します。単語の前に特定の冠詞(der / die / das)がなければ、単語が複数形であるかどうかを判別できない場合があります。とにかく中国語には複数形はありません。


大学ではテーブルについて複数を教えられていますが、ここにも本があります。90年代のDB管理第3版です。テーブルは単数です。また、更新されたコピー、11e、単数形およびいくつかの省略名も持っていますが、XMLセクションでは複数形を使用しています。\ nしかし、RDBMSセクションの実際のコンテンツを確認すると、文字どおり同じテキストであり、一部の画像が見直されています。\ n「データモデリングチェックリスト」には、複数形と単数形のどちらも記載されていません。エンティティが単一のオブジェクトにのみマッピングされる必要があるということです。
Marco、

8

私はかつてユーザーテーブルに "Dude"を使用しました-同じ短い文字数で、キーワードとの競合はありませんが、それでも一般的な人間への参照です。コードが表示されるかもしれない頭が気にならないのであれば、そのままにしておいたでしょう。


8

単数形を使用してきたのは、それが教えられたからです。ただし、最近新しいスキーマを作成する際に、久しぶりにこの規則を維持することを積極的に決定しました。すべてのテーブル名の末尾に 's'を追加することは、すべてのテーブル名の前に 'tbl_'を追加するのと同じくらい役に立たないようです。


7

私はいつもそれは馬鹿げた慣習だと思っていました。複数のテーブル名を使用しています。

(私はそのポリシーの背後にある合理的な理由は、ORMコードジェネレーターがオブジェクトとコレクションクラスを生成するのを容易にすることです。逆の場合よりも単数の名前から複数の名前を生成する方が簡単だからです)


11
この規約は、ORMが存在するずっと以前から、関係理論の一部でした。
ProfK 2008

1
ORMは、マップするオブジェクトの名前を指示するべきではありません。ORMのポイントはオブジェクトの抽象化であり、この柔軟性を付与します。
バリーピッカー2011

7

単数形でも複数形でも、スペルが同じテーブル名には名詞のみを使用します。

ムース魚鹿航空機パンツショートパンツメガネはさみ種子孫


6

私はこれが以前のどの回答でも明確に表現されているのを見ませんでした。多くのプログラマーは、テーブルを扱う際に正式な定義を考えていません。「レコード」または「行」に関して直感的にコミュニケーションをとることがよくあります。ただし、非正規化された関係の一部の例外を除いて、テーブルは通常、非キー属性とキーの間の関係が集合理論関数を構成するように設計されています。

関数は、2つのセット間のクロス積のサブセットとして定義できます。この場合、キーのセットの各要素は、マッピングで最大1回発生ます。したがって、その観点から生じる用語は単数である傾向があります。関数(代数やラムダ計算など)を含む他の数学的および計算理論全体で同じ単数(または少なくとも非複数)の規則が見られます。

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