- - PR -
DBテーブルとJavaクラスのマッピング
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-04-18 13:48
Javaとデータベースの両方に関係するのですが、ほぼ雑談なのでここにポストします。
RDBのテーブルやカラムの命名規則についてのちょっとした悩みです。 今まで、自分で決められる場合は下記のようなルールに従ってきました。 テーブル名 英単語の組み合わせ 複数の単語は"_"でつなげる 原則として最後は名詞の複数形 カラム名 英単語の組み合わせ 複数の単語は"_"でつなげる またSQLを記述する際は、予約語は大文字、それ以外は小文字というルールにも従ってきました。 例えば、DBベンダーの情報を格納するテーブルは、次のようなDDLで作成されるわけです。(制約は省略)
idとnameのプレフィックス"vendor_"はなくてもいいのですが、よくある属性だと他のテーブルとかぶって一目で識別しづらくなるので、これはよくあるスタイルだと思っています。 さて、このスキーマを利用するアプリケーションをJavaで開発します。 データベースアクセスにはEJB 3.0 JPAを採用することにしました。なので、基本的にはテーブルと1対1になるようエンティティクラスを作ります。 Javaの一般的なスタイルだとこんな感じでしょうか。
ここから本題。 Javaクラス名とテーブル名、Javaフィールド名とカラム名が(ignore caseで)同じ場合、@Tableと@Columnアノテーションのname属性は省略可能です。何より、名前が同じだと対応関係が明らかなので、分かりやすい! 僕はテーブルをこう定義するべきなのだろうか・・・。
テーブル名の最後の単語が複数形じゃないのと、"VENDOR_"のプレフィックスがないのはまあ許せるんですが、単語区切りの"_"がないのはちょっとなぁ・・・。 SQLの記述ルール変えて、常にDatabaseVendorやHqAddressなどと書くようにすればいいか・・・。 いや、Javaのほうをデータベースの規則に合わせるという手もあった! クラス名 Database_Vendors とか。(あり得ない・・・) 通常、RDBMSはテーブル名、カラム名の大文字小文字を識別しなくて、Javaは識別するのが根本的なミスマッチなんですけどね。 あぁ、悩ましい。 | ||||||||||||
|
投稿日時: 2007-04-18 14:20
なるほど。
DBとJavaでの慣習としている命名規約が違うから起こる問題なのですね。 規則的な変換であるからには機械的な処理をする方法論も取れそうに思いますが… ところで、日本語でテーブル名・カラム名を付け、 日本語でクラス名・フィールド名を付ける場合は問題にならないのですかね | ||||||||||||
|
投稿日時: 2007-04-18 14:38
つい最近DBを使いはじめたばかりで純粋にEJB3.0を使ってみた感じでは、RDBの命名に_を使うほうが異常な気がします。
素人考えでは、カラム名などはJavadocの説明にするような日本語名を記述して、仕様書だけ見ればテーブルがわかるほうがよいと思います。 (日本語が使えないRDBがあるのかということは知らないですが、PostgreSQLでは-を使わなければ問題なさそうです) | ||||||||||||
|
投稿日時: 2007-04-18 14:49
なるほど! 日本語を使えばいいのかっ!
・・・と思ったけど、僕はUSの会社で働いているのでした。 | ||||||||||||
|
投稿日時: 2007-04-18 15:18
私はS2Daoを使っていますが、EJB3.0と同様で名前が同じなら注釈不要です。
ですので、テーブル名、カラム名はJavaと同じルールで命名します。 古い習慣を引きずる必要はないと思うんですよね。 | ||||||||||||
|
投稿日時: 2007-04-18 16:11
MySQL 4.1 JDBC Driver : mysql-connector-java-5.0.4 で、カラム名に日本語を使ったら java.sql.DatabaseMetaData.getColumns()で文字化けしました。 (JDBC Driverのソースを見たらgetBytes()してる個所があったので、 そこが怪しそうでしたが、私のプロジェクトではなかったので、 日本語使わないようアドバイスしました。) Oracleもミドルウェアによっては、問題が発生したりしました。 (最近は使ってないので、どうかわかりませんが) 余計なトラブルに巻き込まれたくなかったら、使わない方が懸命かと思います。 | ||||||||||||
|
投稿日時: 2007-04-19 00:02
Java、RDB の定義に関わらず、単語を"_" で区切ると、どんないいことがあるのかよくわからないのですが。
RDBMS で、大文字小文字を識別しない、ということは、逆に言えば、vendorId、vendorName と書いてもいいのでは? | ||||||||||||
|
投稿日時: 2007-04-19 01:03
DDL で vendorId と書いても、DBMS のユーザーインタフェースを通すと VENDORID になったりするので悩ましいです。 私はアンダースコアで単語を区切るのが好みですね。 |
1|2|3
次のページへ»