我有表visitors
和表users
。每个访客只能由一个用户创建,并且包含字段visitors.userId
。
因此,表users
中的任何其他用户都可以编辑或删除一个或多个访问者。
我已经创建了第三张表events_log
,用于记录诸如编辑/删除之类的操作:
Visitors_log
id | userId | visitorId | action
此表存储有关对表visitors
执行操作的用户的信息。
表visitors_log
和其余两个之间应该是哪个关系:users
和visitors
?
现在我有了这个Db方案:
我的意见是:visitors_log
可以有一个或多个行。因此,关系是一对多的。 visitors_log
可以同时包含一个或多个用户。那么,我哪里错了?现在,这是一对一的关系。
答案 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,因此您无需在日志中重复该信息。