質問: usersテーブルの構成カラムについて mysqlバージョン4.1.16を使用しています。 このジャンルでお願いします。 よく全ての基本となるusersテーブル(idとパスワードを入れるユーザの基本テーブル) があると思うのですが、それを構成するカラムはどのような感じにするのが良いのでしょうか? 自分は、 create table `users` ( `user_id` varchar(16), `password` varchar(255) default null, `col1` varchar(255) not null, `col2` varchar(255) not null, primary key (`user_id`), ) engine=innodb; このように代替キー(連番)を使わずにuser_idを主キー(unique)にして構成します。 理由としては、uniqueな列があるなら、わざわざ連番を割り当てる必要もないし、 他のテーブルがuser_idを外部キーとして持った時に、その表の外部キーの列が 数字であるよりも見やすいかなと思ったからです。 ただ一般的に出まわっているphpフレームワークなどのテーブル構成ではusersテーブルというか ほとんどのテーブルに連番を使っている例があります。 次のusersテーブルは、phpフレームワークのcakephpで使われるusersテーブルの構成の例で、 連番を使用しています。 create table `users` ( `id` int(11) not null auto_increment, `username` varchar(255) collate utf8_unicode_ci default null, `password` varchar(255) collate utf8_unicode_ci default null, `group_id` int(11) not null, `disabled` tinyint(1) not null, `created` datetime default null, `modified` datetime default null, primary key (`id`), key `group_id` (`group_id`), key `disabled` (`disabled`) ) engine=innodb default charset=utf8 collate=utf8_unicode_ci; 使用状況によって、どちらが良い悪いというのは変わるのでしょうけど 基本的にusersテーブルというのはどのような構成にすべきなのでしょうか? ちなみに自分は連番は○○_seqというカラム名にしてます(ただこれも 一般的には○○idを連番にしてるケースが多いので、どうすべきか迷っています・・・)
回答: 代替キー(rdbmsにより、一意な連番を生成する機能を活用)は、部署コードなど「コード体系が変更される可能性が高い場合」に使うと便利な機能です。 従業員番号やユーザidなど、一意でかつ「コード体系が変更される可能性が殆どない場合」には、あえて使う必要はありません。 操作ログを残していくようなテーブルでは、auto_incrementは便利ですね。auto_incrementの列だけ、あるいは(日時+auto_increment)で一意にして、時系列に操作を追跡できますから。