6

私がすでに見たすべてのアプリケーション/例(ワードプレスなど)。列テーブル名は、キャメル ケースではなく下線を使用します。技術的な非互換性の問題があるのか​​、それとも慣例なのか知りたいですか? システム プラットフォーム (Linux/Windows) または SQL 方言 (Mysql、postgreSQL、DB2、Oracle など) に依存していますか。たとえば、次の表ではキャメル ケースを使用していますが、問題や警告はまだありません。テーブルをリファクタリングする必要がある場合、なぜそれを行う必要があるのですか?

SQL はテーブル/列名について大文字と小文字を区別しませんか? 方言はどうですか?

CREATE TABLE `testuser` (
  `id` bigint(20) NOT NULL,
  `user_type` varchar(8) NOT NULL,
  `username` varchar(30) DEFAULT NULL,
  `password` varchar(128) DEFAULT NULL,
  `regDate` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
4

1 に答える 1

13

少しの背景情報:

(ANSI) SQL 標準では、引用符で囲まれていない識別子はすべて大文字でシステム カタログに格納され、引用符で囲まれていない識別子は大文字と小文字が区別されないことが要求されます。

標準によれば、次の引用符で囲まれていない識別子は同じオブジェクト (テーブルなど) を参照しFOOBARます:foobarFooBarFOOBAR

次の引用符で囲まれた識別子は、3 つの異なるオブジェクトを参照します: "FOOBAR""foobar""FooBar"

ほぼすべての DBMS は、引用符で囲まれていない識別子は大文字と小文字を区別しないという要件に少なくとも準拠しています。私の知る限り、MySQL と SQL Server を除いて、どちらも引用符で囲まれていない識別子でも大文字と小文字を区別するように構成できます。ただし、SQL Serverのデフォルトの動作が何であるかはわかりません(Damienがコメントで指摘したように、これはSQL Serverに使用されている照合に依存します)。

MySQL は、その動作がいくつかの構成設定、ストレージ エンジン、およびファイル システムの組み合わせに依存するため、さらに混乱を招きます。私が知っている他のすべての DBMS は、すべてのプラットフォームとインストールで動作に関して一貫しています。

PostgreSQL は大文字と小文字を区別しますが、すべてを小文字に変換します。

したがって、これらの規則を考えると、アンダースコアを使用する「伝統的な」命名規則は、オブジェクト名が大文字で格納されるという事実に由来すると思います。「読みやすい」名前を取得する唯一の方法は、名前の重要な部分をアンダースコアで区切ることです。

SQL Server は、大文字と小文字を区別する (Windows での NTFS の動作に似ている) ため、さらに標準的ではないため、名前は何にも折りたたまれません。そのため、システム カタログに格納されている名前の大文字と小文字は変更されません (ただし、既定では大文字と小文字は区別されません)。そのため、たとえば Oracle 環境などよりも、キャメルケースを使用して Microsoft 環境で作業している人をよく見かけます。

于 2013-01-14T13:12:23.673 に答える