- 締切済み
カラム名の付け方について
このジャンルでお願いします。 例えば次のようなアカウント情報を格納するテーブルがあったとして CREATE TABLE user ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(64), email varchar(64), password varchar(64), PRIMARY KEY(id) ); idカラム名を「id」か「user_id」にするか悩んでいます。 自分としては「id」のままで良いと思っているのですが、 参考書や他の方のやり方を見てると「user_id」のようにしてる方もいます。 「user_id」にすることによってSQL文を見た時にも何のidかすぐ分かるし、 USING句を使えるなどのメリットがあるのでたしかにこちらの方が良いかなぁとは思うのですが、 「user_id」にするなら統一性をもたせるために「name」も「user_name」にするのか、 「email」も「user_email」にするのか、などキリがないというか・・・ そういう理由もあって自分としては「id」のままなのですが、 みなさんはどちらのやり方をされているのでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
>例えば、楽天なんかはメールアドレスをログインのキー(ID)にしてますよね? >当然メールアドレスがuniqueになると思うのですが、 >その場合オートインクリメントidなどは設けているのでしょうか? 楽天が実際にどうしているかはわかりませんが、 ログイン名は当然ユニークな属性をつけているはずです。 ただし、ユーザー管理テーブルの場合ログイン名がプライマリーキーになることはまれで (1)ログイン名を変更しようとした場合 (2)ユーザーごとにログイン情報の履歴をとる場合 には、別のidが(裏で)利用されていると考えるのが妥当です。 (1)だと、メールアドレスはさまざまな理由で変更になる場合があります ユーザーIDさえ不変であればメールアドレスを何らかの方法で修正すれば 別のアドレスでも個人情報をひきつげます。 (2)の場合、フラグとからめればログイン名やユーザーIDは単一でユニークである 必要はありません。 ユーザーID+フラグで複合のユニーク属性をつけると、修正履歴をもつことができます ユーザーに実際に見せたり、ログインに利用したりするのはフラグの特定番号 たとえばフラグ=0のものは現在のユーザー情報、フラグ=1~5を履歴、などと定義すれば ユーザー管理の幅が広がります。 もちろん正規化して別テーブルで可変の履歴をとればフラグを使う必要はありません
- yambejp
- ベストアンサー率51% (3827/7415)
ユーザーテーブルの中だけでいえばidでもuseridでもuidでもなんでもかまいません。 別テーブルから参照する場合、idとしているとそれが何のidかをわかるように 命名した方が使いやすくなります。 RDBの場合、ほとんどのテーブルは「参照される」ので テーブルごとに異なるidでレコードを管理する場合、idという名称が 競合するため、結果としてidよりuser_idの方が使い勝手がよいでしょう。 おなじようにnameもuserの氏名としてしか使わないなら問題ありませんが companyテーブルにnameを設定しているならunameとcnameに分けた方がよいです。 ただし・・・ 今回のようにオートインクリメントでidを設定する場合、参照性が薄いかもしれません 単にレコードをユニークに判別するためのidで参照につかわないのであれば idのままでもOKです。 その場合、ユーザーを特定するための別の個別idをuser_idにした方がよいです。 たとえば社員番号とかその手の管理番号。
お礼
ご回答ありがとうございます。 >おなじようにnameもuserの氏名としてしか使わないなら問題ありませんが >companyテーブルにnameを設定しているならunameとcnameに分けた方がよいです。 なるほど、他のテーブルにあるかという基準で考えればいいわけですね。 参考になりました。 本題からずれて申し訳ないのですが、 一般的にアカウントを格納するテーブルのカラム構成ってどのようになってるのでしょうか? 例えば、楽天なんかはメールアドレスをログインのキー(ID)にしてますよね? 当然メールアドレスがuniqueになると思うのですが、 その場合オートインクリメントidなどは設けているのでしょうか? そのサイトの目的によってアカウントテーブルの構成は異なってくるとは思うのです、 必要最小限のカラムで構成する場合にyambejpさんならどのような構成にするのか教えて頂けないでしょうか?
お礼
ご回答ありがとうございます。 なるほど、たしかに履歴は取っておいたほうがいいですね。 参考になりました。