Sql

テーブルの命名のジレンマ:単数形と複数形



Table Naming Dilemma



解決:

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

理由1 (コンセプト)。 「AppleBag」のようなリンゴが入ったバッグを考えることができます。0、1、または100万個のリンゴが入っていても、常に同じバッグです。テーブルは、コンテナであり、テーブル名は、含まれるデータの量ではなく、含まれる内容を説明する必要があります。さらに、複数形の概念は、話されている言語に関するものです(実際には、1つ以上あるかどうかを判断するため)。



理由2 。 (快適)。複数の名前よりも単数の名前の方が簡単に出てきます。オブジェクトは不規則な複数形を持つことも、まったく複数形にならないこともありますが、常に単数形になります(ニュースなどのいくつかの例外を除く)。

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

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



  • 1.注文
  • 2.OrderDetail

に比べ:

  • 1.OrderDetails
  • 2.注文

理由4 (単純さ)。すべてをまとめると、テーブル名、主キー、関係、エンティティクラス...は、2つ(単数クラス、複数テーブル、単数フィールド、単数-複数マスター-詳細)ではなく、1つの名前(単数)のみを認識する方がよいでしょう。 。)

  • お客様
  • Customer.CustomerID
  • CustomerAddress
  • パブリッククラスの顧客{...}
  • 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、..。

または、悪名高い角かっこを使用します[ユーザー]


オブジェクトリレーショナルマッピングツールを使用している場合、または将来的に使用する場合は、 特異な

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

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

私が使用する新しい名前に合わないことがわかったテーブルの1つは、UsersInRolesです。ただし、これらのいくつかの例外は常に存在し、この場合でも、UsersInRoles.Usernameのように問題なく表示されます。


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