・テーブル名
・カラム名
を決定します。
その際の、命名規則で悩んでいます。
例えば、ユーザテーブル「user」内に、
ユーザID「user_id」があるとします。
別テーブルにも、ユーザIDをユニークとしたカラムがある場合、こちらも「user_id」とするか、「テーブル名_user_id」にするかで悩んでいます。
今まではカラム名はかぶらないように全て変えていましたが、実際に運用されている方はどのようにしているのか気になりました。
この場合、どちらのほうがいいのでしょうか?
同じものを指しているカラムは出来るだけ同じ名前にしています。
その方が分かりやすいし、大抵そういうのはテーブル結合のキーになるので、JOIN A,B USING ON ( ... ) でまとめられるので、都合がよいのです。
同じものを指していないのなら別の名前にすべきでしょうけど、今回の場合ユーザーIDとの事なので同じでいいように思います。
あと、別の名前にするときも「テーブル名_user_id」はうまくないですね。
意味が分かりにくいし、テーブル名付きで参照する時に「テーブル名.テーブル名_user_id」になってしまい情報が重複しています。
意味を正確に表す名前にします。その結果としてカラム名がかぶるなら、かぶってもよいのでは。
例えばレコードの更新ユーザーであれば、私は同じ名前にします。
あとデータベースがわかりませんが、SQLServerだとuser_idは関数名としてあるので、[]でくくれば列名としても使えますが、避けたほうがよいと思います。
ありがとうございます。
見てわかる、ということを第一に設計されているのですね。
テーブル名・カラム名の混乱はなくなりそうですね。
データベースはMysqlの予定です。
関数名にひっかかりそうなものも注意ですね。
ぼくの感覚でいくとシステム内で同じ値を指すのであれば、
カラムは同じにします。
たとえば、ユーザーマスタと、注文情報データがあって
どのユーザーがどの注文をしたか?というのを考えるときは、
両方のテーブルでユーザーのIDを示すカラムは、同じ名称に
すると思います。
というか、データベース設計するときに、主キー、外部キー等を
考えると同じにしとかないとややこしいですけどね。
全然違う管理をするユーザー情報なのであれば、
別名にしますけど・・・。
たとえば、何かのサービスをWEBシステム上で提供していて
そのログインユーザー(お客様情報)と社内システムの
ログインユーザー(社員情報)で、両者をユーザーとする
場合などです。
ありがとうございます。
やはり同じものを指す場合は、
同じカラム名がよさそうですね。
少し安心してきました。
その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全体のモトにしていそうですね。
ありがとうございます。
同じものを指すときは、同じ名前が便利なのですね。
「テーブル名_user_id」はやはりまずいですか・・・。
今見ていたオープンソースソフトがこれだったので試してみようかと思っていましたが、
そういわれてみれば確かに重複していますねぇ。