两个表之间的关系?

时间:2019-02-18 22:32:36

标签: mysql sql

我有表visitors和表users。每个访客只能由一个用户创建,并且包含字段visitors.userId

因此,表users中的任何其他用户都可以编辑或删除一个或多个访问者。

我已经创建了第三张表events_log,用于记录诸如编辑/删除之类的操作:

Visitors_log

id | userId | visitorId | action

此表存储有关对表visitors执行操作的用户的信息。

visitors_log和其余两个之间应该是哪个关系:usersvisitors

现在我有了这个Db方案:

enter image description here

我的意见是:visitors_log可以有一个或多个行。因此,关系是一对多的。 visitors_log可以同时包含一个或多个用户。那么,我哪里错了?现在,这是一对一的关系。

1 个答案:

答案 0 :(得分:2)

访问者的user_id是否有可能改变?

如果答案是肯定的,那么您最好采用安全的方法,并在日志中有两个外键,分别引用相关的访问者提交操作的用户。

在MySQL中:

CREATE TABLE visitors_log (
    idVisitorLog INT AUTO_INCREMENT,
    idVisitor    INT NOT NULL,
    idUser       INT NOT NULL,
    action       VARCHAR(100) NOT NULL,
    date_action  DATETIME NOT NULL,
    PRIMARY KEY (idVisitorLog),
    FOREIGN KEY (visitor_log_idVisitor) REFERENCES visitors(idVisitor),
    FOREIGN KEY (visitor_log_idUser)    REFERENCES users(idUser)
);

PS:您可能也希望在日志表中添加一个日期列。


另一方面,如果分配访问者的用户永远不会随着时间变化,那么可以简化您的设计。在日志表中,您可以仅将外键存储到visitors表。由于访问者存储(固定)用户ID,因此您无需在日志中重复该信息。

相关问题