2016-09-25 18 views
1

これはSQLの命名規則に関する質問です。SQLでのテーブル名とフィールドの重複を避ける方法

テーブルとフィールドが両方とも同じ語句で記述されている場合、どのように名前をつけるべきですか?両方に同じ名前をつけても構いませんか?

私の例:

私が質問を作成していますし、私はこれを行うための最善の方法は、このような構造を有することであることを考え出して、各質問には、多くの答えに1を持つことができます。

CREATE TABLE question 
(
    id INT NOT NULL IDENTITY(1,1), 
    question VARCHAR(250) NOT NULL 
) 

CREATE TABLE answer 
(
    id INT NOT NULL IDENTITY(1,1), 
    question_id INT NOT NULL, 
    answer VARCHAR(50) NOT NULL 
) 

を(2つのテーブルはそれほど小さくはありませんが、簡単にするためにいくつかの列を削除しました)

問題は、テーブルと同じ名前のフィールドが適切な命名規則に従っていないと思います。

私は質疑応答の列をテキストのように変更することを考えましたが、残念なことにそれは予約語であり、標準の命名規則に反しています。それに加えて、参照する際には[]タグを使用する必要があります。

列や表に名前を付ける方法についての推奨事項はありますか?

+1

「名前」と「説明」は一般的な選択肢です。 SQL Serverで記述している場合は、角括弧を使わずにキーワードをテーブル名として理解することができるほどスマートですが、その単語はまだハイライト表示されます – Ben

+1

おそらくquestion.content&answer.content?大括弧を必要とするフィールド名は避けるのが最善です。 ( - >空白なしまたは標準SQLキーワード) – LukStorms

答えて

1

まず、TEXTは予約済みのSQLキーワードではありません。 (少なくとも、SQL 2003のドラフトでは、私はそれを見ていませんでした)。

これはSQL Serverのデータ型ですが、列名の角かっこについては、使用していると思います。 (大カッコも標準ではありません。標準SQLでは、使用できないカラム名には二重引用符を使用しています)。大カッコや引用符を使用するカラム名は使用しません。 TEXTは問題を起こさないはずですが、私はそう思います。そして、SQL Serverは、すでに彼らは将来のバージョンでは、そのタイプを削除します発表:https://msdn.microsoft.com/fi-fi/library/ms187993(v=sql.105).aspx

ntext型、テキスト、および画像データ型は、将来のバージョンのMicrosoft SQL Server では削除されます。

とにかく、私はよく見てきた命名冗長性を解決する一つの方法は、テーブルに複数の名前を与えることですので、あなたのテーブルanswersは、列answerを持っているでしょう。代替方法はanswertextまたはanswer_textです。しかし、あなたはあなたが持っているものに固執することさえできます。テーブルanswerにカラムanswerが含まれていても問題ありません。

1

私は、テーブル名と質問として列名として質問を優先します。 id = xが意味を成す質問からの質問を選択してください: の代わりに質問から説明を選択するか、質問からテキストを選択するか、質問から質問を選択してください。

0

キー列

の命名規則を取得するためにあなたは、「ID」フィールドの命名規則を得るでしょう、advantureworksデータベースに見ては、「TableNameID」である

詳細は、次のリンクをたどりますDatabase, Table and Column Naming Conventions?

私はこの回答が答えではなくコメントとして入力されるべきであることを知っていますが、私はコメントする評判が50ではありません。

関連する問題