私は、作成中の Web サイトに非常に単純なユーザー データベースを実装していますが、当然のことながら、できるだけ「ベスト プラクティス」に近い作業を行いたいと考えています。データベースは MySQL にあり、テーブル定義に苦労しています。
CREATE TABLE IF NOT EXISTS 'users' (
`user_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'auto incrementing user_id of each user, unique index',
`user_email` varchar(254) COLLATE utf8_unicode_ci COMMENT 'user''s email',
`user_password_hash` text COLLATE utf8_unicode_ci NOT NULL COMMENT 'user''s password in salted and hashed format',
PRIMARY KEY (`user_id`),
UNIQUE KEY `user_email` (`user_email`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='user data' AUTO_INCREMENT=1 ;
このテーブル定義を php-login.net から借用し、それを編集して user_email を一意のキーにしました (元のキーはテキスト フィールドであり、一意ではありませんでした)。
いくつか読んだ後、これほど大きな一意のキー/インデックス(254 * 3バイト)を持つことはデータベース設計が悪いことを意味し、MySQLのキーの最大長が1000バイトであるという事実は私に考えさせるいくつかのコメントを見ました私は何か間違ったことをしています。このデータベースは改善できますか、それともこのままで問題ありませんか?
MySQL でのインデックス作成の内部動作と関連するオーバーヘッドの量がわからないので、これほど大きなキーが効率的でない可能性は十分にあると思います。
助けてくれてありがとう。