0

データベースに管理者用とユーザー用に 2 つの個別のテーブルを作成しました。ユーザーと管理者のログイン詳細 (IP アドレス、user_agent、接続時間など) を 1 つのテーブルに保存したいと考えています。このテーブルに管理者 ID 用とユーザー ID 用の 2 つのフィールドを作成する唯一の解決策は (以下のように) ですか?

CREATE TABLE login_detail (
    id int NOT NULL AUTO_INCREMENT,
    admin_id int,
    user_id int,
    ip_address ...
    ...
    PRIMARY KEY (id),
    FOREIGN KEY (admin_id) REFERENCES admin(id) ON DELETE RESTRICT ON UPDATE RESTRICT,
    FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE RESTRICT ON UPDATE RESTRICT
)

管理者がログインすると、管理者の ID が保存されadmin_iduser_id空になります。ユーザーがログインすると、ID が保存されuser_idadmin_id空になります。(一般的に)何を提案しますか?

4

1 に答える 1

0

ermagana は、あなたがこれら 2 つのテーブルを 1 つのテーブルに変換していることを理解していたと思います。新しい 3 番目のテーブルを介してこれら 2 つのテーブルにアクセスするのではありません。少なくとも、あなたの回答を見るまではそう思っていました。私は正しいですか?もしそうなら...

一般に、ermagana が応答したように、管理者権限を示すビット フラグを持つ 1 つのテーブルにこれがすべて含まれない理由はありません。唯一の選択肢ではありませんが、これが最も一般的な実装になると思います。

私が理解しているように、3 つのテーブルを使用する実装には、追加のコーディングと、確実に多くのデータベース アクティビティが必要になります。ユーザーがユーザーであるかどうかを確認し、そうでない場合は、ユーザーが管理者であるかどうかを確認する必要があります。また、追加のコーディングとデータベース アクティビティなしで、同じユーザーが両方のテーブルに存在しないようにするにはどうすればよいでしょうか? 少なくとも私が理解しているように、それは非効率的でエラーが発生しやすいようです。

たぶん、私はそれをまったく理解していません。もしそうなら、明確にしてください。

于 2013-09-15T21:18:00.607 に答える