2011-01-17 22 views
46

ユーザが定義した順序付けを必要とする新しいテーブルを作成すると、最初のアイデアは常にカラム名 "order"に移動します。もちろん予約語なので、これはうまくいきません。MySQLのカラム名 "order"の代わりに

dbモデルでは、その列にどの名前を付けていますか?

ありがとうございました。

+11

+1です。時には、この場合のように、実際には経験豊富な開発者の意見が参考になります。 –

答えて

41

私はしばしばシンプルな同義語「ソート」を使用します。

4

SQL Serverでは、少なくとも、角カッコで囲んだ場合はキーワードを使用できますが、それは良い考えではないと私は同意します。

私がこれを最後にしたとき、私は名前にSortOrderを使用したと思います。しかし、私はしばしばUsrSortOrderのようなテーブルを反映する接頭辞を使用するので、必ずしも問題ではありません。

+0

問題は私がJPAを使用することであり、括弧の有無にかかわらず狂っています。/名前を変更する必要があります。しかし、最終的には、この言葉が予約されているのでそれほど悪くはありません。あなたの返信ありがとう –

+0

名前を引用するためにANSI標準を使用するとJPAがより快適になると思います。二重引用符。これらの括弧はSQL Serverの「専門」ですが、標準の引用も同様に理解されています(構成の変更が必要かどうかはわかりません)。したがって、 ''順序 "'は実際に動作するかもしれません。しかし、私はまだ別の名前を見つけることをお勧めします。オブジェクト名を引用すると、最終的には問題が発生します。 –

3

ANSI/ISO SQLでは、二重引用符は列名として使用するとキーワードを区切ります。文字列リテラルは、単一引用符で区切られています。

select [from] = 'from' from foo 

しかし、いずれにせよ、それはの恐ろしい混乱を行います

select "from" = 'from' from foo 

のMicrosoft SQL Serverは、同様に二重引用符の代わりに角括弧を使用することができますあなたのコード(上記を誰かに読んでみてください)

私は結果を注文するための列が必要な場合、私は一般的に 'sequence_number'または 'sort_sequence'のようなものを呼び出します。

8

ただ、例えば、あなたのテーブルと列の名前の周りに目盛りを `追加:

CREATE TABLE `order` 
    (
     `order#` char(4) NOT NULL, 
     `ord_date` DATE, 
     Primary Key (`order#`) 
) 
    ENGINE=InnoDB; 

これは、少なくとも、このは、MySQLの現在のバージョンで動作し、特殊文字や、使用するキーワードが可能になります。

+0

私は知っていますが、私はEbeanを使用しています。理解できない理由で、これらのダニを追加しないので、予約されたキーワードを使用して列に名前を付けると失敗します。 –

+0

+1ご協力いただきありがとうございます。 – Jignesh

51

「注文」の代わりに「位置」を使用します。この質問は、意見が喚起されても閉鎖されましたが、

+6

+1 'ORDER BY position'は確かに' ORDER BY sort'より読みやすく、「sort」は「type」と混同する可能性があります。 – rybo111

+0

'position'の問題は、いくつかのSQLフレーバで予約語とみなされていることです。 [this](https://www.postgresql.org/docs/8.3/static/sql-keywords-appendix.html)を参照してください。 – Mustafa

関連する問題