1

mysql データベースで命名規則を使用する方法を知っていますか? mysql サンプル データベースをダウンロードしました。

ここにあります:

CREATE DATABASE IF NOT EXISTS classicmodels  DEFAULT CHARACTER SET latin1;
USE  classicmodels ;
DROP TABLE IF EXISTS  customers ;
CREATE TABLE  customers  (
   customerNumber  int(11) NOT NULL,
   customerName  varchar(50) NOT NULL,
   contactLastName  varchar(50) NOT NULL,
   contactFirstName  varchar(50) NOT NULL,
   phone  varchar(50) NOT NULL,
   addressLine1  varchar(50) NOT NULL,
   addressLine2  varchar(50) default NULL,
   city  varchar(50) NOT NULL,
   state  varchar(50) default NULL,
   postalCode  varchar(15) default NULL,
   country  varchar(50) NOT NULL,
   salesRepEmployeeNumber  int(11) default NULL,
   creditLimit  double default NULL,
  PRIMARY KEY  ( customerNumber )
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

編集:

私が好むもの:

    CREATE DATABASE IF NOT EXISTS classic_models;
    USE  classic_models ;
    DROP TABLE IF EXISTS  customers ;
    CREATE TABLE  customers  (
       customer_number  int(11) NOT NULL,
       customer_name  varchar(50) NOT NULL,
       -- or i define the column name this way:
       name varchar(50) NOT NULL, -- NOT customerName and NOT customer_name
       PRIMARY KEY  ( customer_number )
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

私は正しいですか?

記事をお勧めします: Faruk Ateş のsql規則 ここでの命名規則について何かアドバイスはありますか?

4

3 に答える 3

7

命名規則について、あなたが正しい (または間違っている) ことは決してありません。雇用主から雇用主へと移動すると、すべての職場でさまざまな慣習に遭遇し、常に適応する必要があります。好みはすでに述べたので、自分のプロジェクトで作業するときは、それを使用してください。ただし、システムが別のものの上に構築されていて、一貫して別の規則を使用している場合を除きます。次に、そのプロジェクトでその規則を使用する方がよいと思います。一貫性 > 好み。

于 2009-12-04T14:26:13.947 に答える
3

この考えが気に入らない場合は落ち着いてください。
ただし、列名はテーブル名から独立していると考えましたか?

セマンティクス

セマンティックは次のようになります。
「2 つのフィールドが startDate と endDate と呼ばれる場合、現在のテーブルで考慮される期間を決定する日付を指定します。」

そのセマンティックは通常テーブルをまたぐので、一貫した名前を持つことは良いことです。

実装に関する懸念事項

データベース内

共通の列名の前にテーブル名が付いているかどうかはまだ理解していると言う人もいるかもしれません。しかし、いくつかのユースケースで、私たちはこれに悩まされ、次のことを好みました。

  • メタリクエストを効率的に使用するには (たとえば、startDate という名前のすべての列を読み取るリクエストを作成するか、参照データを使用するすべてのテーブルを検索するリクエストを作成します)、固定名の方がはるかに簡単です。
  • 名前が固定されている場合、ストアド プロシージャまたはトリガーも簡単に再利用できます。

ORM

ORM は、一度フィールドを定義すると、そのフィールドを持つサブクラスを自動的に作成できるという点で非常に優れています (コンポジションも使用されます)。データベースにはサブクラスはありませんが、

  • クラスにマップされたさまざまなテーブルが列に同じ名前を使用している場合、すべてが自然です。
  • それ以外の場合は、コード内の startDate が XXXStartDate または XXX_start_date... としてデータベースに実装されているという事実をハンドコーディング (または宣言) する必要があります。

エイリアスを要求する

一部のリクエストは自己結合であり、同じテーブルを 2 回結合するため、すべての場合にテーブル名にエイリアスを使用する必要があります。

ハンドコーディングされた他のほとんどのリクエストは、複数のテーブルに参加します。この命名ポリシーでは、2 つの列が同じ名前を持つ可能性が高くなるため、エイリアスを使用する必要があります。問題ありますか?次の理由ではないと思います。

  1. とにかくエイリアスを使用することが推奨されることが多く、グッドプラクティスと見なされます。
  2. どちらの場合もエイリアスを使用すると、より一貫したコーディング環境が可能になります。
  3. エイリアスを使用すると、テーブル名よりもいくつかの利点が
    あります。リクエストで短いエイリアスを使用できるため、「モジュール」でテーブルをグループ化するためのプレフィックスを含む、長くて明確なテーブル名を許可できます。
    b. データベースにアクセスするすべてのアプリケーションのすべてのモジュールに対してテーブル名が固定されている一方で、アプリケーションまたはモジュールはリクエストでさまざまなエイリアスを使用できるため、リクエストでより多くのセマンティックを提供できます(コードで変数に名前を付けるのと同じように、同じルール)。
于 2009-12-04T15:00:45.687 に答える
2

あなたが示した両方の命名規則は完全に受け入れられます。writingLikeThis の方が入力しやすいですが、writing_like_this の方が読みやすいです。最も重要なことは一貫性です。命名規則を 1 つ選び、それに従います。

于 2009-12-04T14:35:55.740 に答える