人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

データベースを設計する際に、

・テーブル名
・カラム名

を決定します。

その際の、命名規則で悩んでいます。

例えば、ユーザテーブル「user」内に、
ユーザID「user_id」があるとします。

別テーブルにも、ユーザIDをユニークとしたカラムがある場合、こちらも「user_id」とするか、「テーブル名_user_id」にするかで悩んでいます。

今まではカラム名はかぶらないように全て変えていましたが、実際に運用されている方はどのようにしているのか気になりました。


この場合、どちらのほうがいいのでしょうか?

●質問者: onigirin
●カテゴリ:ウェブ制作
✍キーワード:USER カラム カラム名 データベース ユニーク
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● b-wind
●23ポイント

同じものを指しているカラムは出来るだけ同じ名前にしています。

その方が分かりやすいし、大抵そういうのはテーブル結合のキーになるので、JOIN A,B USING ON ( ... ) でまとめられるので、都合がよいのです。


同じものを指していないのなら別の名前にすべきでしょうけど、今回の場合ユーザーIDとの事なので同じでいいように思います。


あと、別の名前にするときも「テーブル名_user_id」はうまくないですね。

意味が分かりにくいし、テーブル名付きで参照する時に「テーブル名.テーブル名_user_id」になってしまい情報が重複しています。

◎質問者からの返答

ありがとうございます。

同じものを指すときは、同じ名前が便利なのですね。

「テーブル名_user_id」はやはりまずいですか・・・。

今見ていたオープンソースソフトがこれだったので試してみようかと思っていましたが、

そういわれてみれば確かに重複していますねぇ。


2 ● memo77
●23ポイント

意味を正確に表す名前にします。その結果としてカラム名がかぶるなら、かぶってもよいのでは。

例えばレコードの更新ユーザーであれば、私は同じ名前にします。

あとデータベースがわかりませんが、SQLServerだとuser_idは関数名としてあるので、[]でくくれば列名としても使えますが、避けたほうがよいと思います。

◎質問者からの返答

ありがとうございます。

見てわかる、ということを第一に設計されているのですね。

テーブル名・カラム名の混乱はなくなりそうですね。

データベースはMysqlの予定です。

関数名にひっかかりそうなものも注意ですね。


3 ● samasuya
●22ポイント

ぼくの感覚でいくとシステム内で同じ値を指すのであれば、

カラムは同じにします。

たとえば、ユーザーマスタと、注文情報データがあって

どのユーザーがどの注文をしたか?というのを考えるときは、

両方のテーブルでユーザーのIDを示すカラムは、同じ名称に

すると思います。


というか、データベース設計するときに、主キー、外部キー等を

考えると同じにしとかないとややこしいですけどね。


全然違う管理をするユーザー情報なのであれば、

別名にしますけど・・・。


たとえば、何かのサービスをWEBシステム上で提供していて

そのログインユーザー(お客様情報)と社内システムの

ログインユーザー(社員情報)で、両者をユーザーとする

場合などです。

◎質問者からの返答

ありがとうございます。

やはり同じものを指す場合は、

同じカラム名がよさそうですね。

少し安心してきました。


4 ● YasudaS
●22ポイント

そのuserの意味に依存すると思います。

たとえば、課金用のuserと、システムへのログイン用userで内容が異なる場合、user_kakin,user_login等と名前をつけます。

また、UserIDとUser名等で、数値/文字列で型が違う場合にも名前を違うモノとして扱います。

また、user等といった「何のユーザなんだ」とすぐにわからない様な短い名前は避けます。

ABCシステムの課金用ユーザのテーブルなら、kakin_ABCテーブルという名前のテーブルに、UserID_int_kakin_ABC (ID用) UserName_str32_kakin_ABC(ユーザ名)という風につけます。

こうしておいておくことで、XYZシステムと統合する時に、UserID_int_kakin_ABC =UserID_int_kakin_XYZ等と明確にわかるコードで記述することが出来ます。

◎質問者からの返答

ありがとうございます。

型もカラム名に入れるというのは初めて知り、とても新鮮でした。

「はてな」のように、基本となるユーザテーブルを用意し、そこからテーブルを広げようと設計していました。

この場合「ユーザid」に英数字を入れて、これを主としてDB全体のモトにしていそうですね。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ