同じ名前の列を含む SQL テーブルを作成するのは不適切なコーディング方法ですか?
-
21-08-2019 - |
質問
例:
CREATE TABLE ErrorNumber
(
ErrorNumber int,
ErrorText varchar(255),
)
これにより、次のようなクエリが生成される可能性があります。
SELECT ErrorNumber FROM ErrorNumber WHERE ErrorNumber=10
解決
私はテーブルの列としてErrorNumber(エラー番号)が主キーであることを仮定していますか?この場合、あなたは、テーブルの列ErrorNumberIDに名前を付けることができます。
私はそれが悪いコーディングの練習であることについて知らないが、私はそれを読みやすくするために何かをやっていると想像することはできません。あなたが提供した例は、クエリがなってしまうことができますどのように混乱を示すで素晴らしいです。
この(列名はテーブル名と同じである)エラーを引き起こす場合、私はのわからないんだけど、他のものはありますか?私はそれがベンダーからベンダーに変わると確信しています。
他のヒント
CREATE TABLE Errors (
Number int,
Description varchar(255)
)
以下の理由から、上記の名前付けスキームの方が優れていると感じます。
- テーブル名は、それが何であるかを表しています。
- 列には単語は必要ありません テーブルのためにそれらの「エラー」 彼らは入っています。
デフォルトとあなたの主キーIDを名前に固執する可能性があります。
私はそのテーブルと同じ名前を共有する列を持っているのは良いアイデアだとは思いません。それは、それが動作しても混乱するのです。 Errorにあなたのテーブルの名前を変更してみたりErrorNumあるいは単にのNum
の列はい、そうです。単純なデータモデルでの簡単な表の大半は、複数の名詞でなければなりません。あなたの例では、テーブルは、2つの列、「ID」、および「説明」と、「エラー」と呼ばれるべきである。
私はDWCに同意し、それがエラーテーブルのどのタイプのように、もう少し記述テーブルの何かに名前を付けるにはさらに一歩それを取るでしょう。それはあなたのコードで使用するエラーを格納するために使用されている場合は一つのことであり、その場合はエラーを記録表には、別のです。あなたがのためにそれを使用しているので、それは本当にあなた次第、それにそれがために使われているコンテキストに理にかなって何かに名前を付けることだかわかりません。私は「エラー」という名前のテーブルを見ると、私はそのログテーブル、またはルックアップテーブルは、エラーコードを検索するために使用されている場合わかりません。それはおそらくのerrorCodeのようなものが良い名前だろうよりも後者の場合ます。
CREATE TABLE ErrorCodes
(
Id int,
Number int,
Description varchar(255)
)
は、それが悪いですか?たぶん、少しそれは主要な何もない。
私はそれは大きなものではありません同意します。
私たちは、とidと「名前」フィールドを持つアプリケーション内のテーブルのskadsを持っています。彼らは、ドロップダウンリストに使用されます。
だから私はこのようにそれらを設定しました
リスト名がある:州
テーブル名がある:州
IDは次のとおりです。STATEID
実際の状態値列である:ステート名
これは、私たちのために動作します。
上記で示唆したように、あなたの特定のケースでは、私はどうなるとちょうどテーブルエラーに名前を付けます。
、別のデータベースベンダーを使用しています。任意のデータベースを簡単に問題なくそれを解析する必要があります。
私はそれはおそらく、読みやすさの理由のために良い習慣ではありません同意します。
その問題。個人的に、私はそれが決して起こらないだろう、ほとんどのテーブル名は複数作ります。この特定のケースでは、私のテーブルはErrorNumbersだろうとテーブルのフィールドは、ErrorNumber(エラー番号)(実際に私はErrorNumberIDを使用します)。
になりますここでも、しかし、そのアップあなたやコーディング標準をあなたの会社に。それは悪いフォームがある場合、それは非常にマイナーな違反です。どちらかといえば、違反の多い変数名にその欠落しているIDます。
次に、私の好みは名前として総称を使用することです。これは「S」、例えば単数及び付加をターキンと同じではないことに注意してください私は、「従業員」と「EmployeesSalaries」はそれぞれにわたって「人事」と「給与」を好みます。そして、このような「Entitys」などの名前を取り出しべきであるとショット:)
このの光、およびデザイン内の列を考慮して、私は質問「エラー」でテーブルに名前を付けます。今、私は多くのプログラマーは、テーブル名の単数形の用語を好むが、それはむしろ「貧しいコーディングプラクティス」よりも、ちょうど別のスタイルを知っている。
単列テーブルの偶発的ニーズがあり、例えばテーブル「定数」... DBMSを使用するアプリケーションが使用するパイの共有近似を含むが、それは名前として総称を取得するので、私が考えている「定数」テーブルが異なる定数の複数の列それぞれを持っています。
あなたのアプリケーションがしか1つの定数を使用した場合、おそらく、多分、あなたは「パイ」と呼ばれるテーブルで終わるだろうか?まあ、私が作った別のスタイルの選択は、列名のテーブル名とlower_case_separated_by_underscoresためUpperCamelCaseを使用することです。したがって、私はまだカラムから(わずか約)テーブルを区別することができ、すなわち
SELECT pi FROM Pi;
[そして、このような、ここでの一つとして、コードのパーサがSOより簡単に、あまりにも仕事になります!]
実は、私は書くことがより可能性が高いと思いますので、ほぼ独占的にテーブルの相関名を使用する傾向がある。
SELECT P1.pi
FROM Pi AS P1;
また、いくつかの集団の用語は単数形の用語、例えば同じ綴られていることを考えます「種」、「鹿」、「羊」、「魚」と、おそらく他の多くは、動物界に関係ありませんが、私はちょうど今、精神的なブロックを持っている:)
私も私の優先データ要素の命名規則と同じ名前を持つ列を含むSQLテーブルを想定することができながら、だから、それは本当にまれな出来事になります。
DWCのsuccint名の1。
「カラム名は、値のドメインを意味すべきである」との問題は、それがコンテキストを見渡すことです。列名は、ののみのテーブルのコンテキスト内に存在します。それは決して曖昧です。そのドメインは、独立して、その名前の制御されています。
人はErrors.Description
とParts.Description
とProblems.Description
を区別することができない、またはDescription
またはName
という名前のすべての列が同じ神聖な井戸から引き出されていることを前提としています誰が誰に存在していますか?
私は非常に異なる理由のために、主キー列のために、このようなの番号またはのID のように一般的な用語を使用していない、言った:カラムはどこに新しい名前が必要それは、外部キーとして表示されます。
と仮定エラー番号は、言う、Actions
テーブルの中に記録しなければなりませんでした。我々はActions.Number
のようなものを発明することを強制しているので、Actions.ErrorNumber
はおそらく、エラー番号を参照することはできません。それは他のどこでもErrorNumber
するために起こっている場合、それは同様にそれがキーとして機能同じ名前を持っているかもしれません!