2

私は最近、ステップバイステップでガイドする安全なphpログインシステムの作成に関する記事を読みましたが、なぜこの記事ではlogin_attemptsテーブルに主キーがないのかという疑問が浮かびました。私が話した記事: この記事

Create the "login_attempts" table:
CREATE TABLE `secure_login`.`login_attempts` (
  `user_id` int(11) NOT NULL,
  `time` VARCHAR(30) NOT NULL 
) ENGINE=InnoDB

手順 4 に進んでください

ログイン試行を格納するテーブルを作成します。

タイトルがそうであるように、質問は本当に明確です。主キーがないという状況はありますか?

4

5 に答える 5

3

はい、ありますが、テーブルでクエリを実行するときのパフォーマンスを向上させるには、少なくとも非一意の INDEXon 列を追加する必要があります。User_ID

ALTER TABLE login_attempts ADD INDEX idx_userID (User_ID)
于 2012-11-27T16:08:35.190 に答える
1

主キーのポイントは、パフォーマンスのために一意の値でデータにインデックスを付けることができる値を提供することです。あなたが持っているような状況では、どちらの列も一意ではない可能性があります。ログオンがマルチスレッド化されていると仮定すると、少数ではありますが、多数のユーザーが同じtimeログオンを行って、明らかに誰かを拒否したり障害を引き起こしたりする主キーを配置する可能性があります。主キーを配置user_idすると、同じユーザーの複数回の試行が拒否されます。

外部キーのために他の 2 つのテーブル間のテーブルと多対多の関係を作成するなど、他の状況では、同様のことを行います。

免責事項誰かがより強力な説明を提供できると確信していますが、これは私の理解です。

于 2012-11-27T16:10:36.967 に答える
0

デフォルトでは主キーは必要ありません。たとえば、他のテーブルで外部キーとして使用される場合など、テーブルの各行を識別可能にする必要があるかどうかによって異なります。

その特定のケースでは、user_idこれで十分だと思いますが、その列を使用して選択する可能性が最も高いため、インデックスを作成する必要があります。

于 2012-11-27T16:10:53.910 に答える