0

我在我的数据库中为管理员和用户创建了 2 个单独的表。我想将用户和管理员登录详细信息(IP 地址、用户代理、连接时间等)保存到一张表中。唯一的解决方案是在此表中创建两个字段,一个用于管理员 ID,另一个用于用户 ID(如下所示)?

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 了解您正在将这两个表转换为一个表,而不是通过新的第三个表访问这两个表。至少,在我看到你的回复之前,我是这么认为的。我对么?如果是这样...

一般来说,正如 ermagana 回应的那样,没有理由不将所有这些都放在一个带有指示管理员权限的位标志的表中。我相信这将是最常见的实现,尽管肯定不是唯一的选择。

据我了解,您使用三个表的实现将需要额外的编码,当然也需要更多的数据库活动。您将需要检查用户是否是用户,如果不是,则检查用户是否是管理员。此外,如果没有额外的编码和数据库活动,您将如何确保同一个用户不在两个表中?至少我如何理解它,它似乎效率低下且容易出错。

也许我根本不明白。如果是这样,请澄清。

于 2013-09-15T21:18:00.607 回答