我想问一个关于良好数据库设计的建议,以记录用户活动。
目前我正在为一个简单的网站实施这种方法,用户可以在网站上发布/编辑/删除文章。
表日志
- log_id
- log_change[Enum: new/edit/remove]
- log_date
- member_id
- post_id
表格
- post_id
- post_title
- etc....
表会员
- member_id
- member_username
- member_pwd
- etc..
使用此表,每当用户发布一篇文章的新帖子(或编辑/删除)时,它都会记录在日志上(以及它发生的时间)。
然而,如果我正在处理一个更大的系统,不仅用户可以发布文章而且做其他事情,例如登录/注销(来自系统),那么进行购买(交易)。
我应该为每个模块寻找不同的表吗?例如,如果系统有发布文章,电子商务等模块,那么我会有以下日志表:
每个表将记录每个相应模块中的活动。
答案 0 :(得分:1)
您可以使用实体子类型设计方法,其中常见的日志属性(如谁和何时)在单个表中跟踪所有类型的更改。对于具有其他属性的更改,您可以使用其他表,每种类型一个。
每个子类型日志表都使用外键引用公用表。通常,从子类型表到公用表的外键也是子类型表的主键,即关系是1:1。
在这样的设计中,公用表通常包括一列(分区属性),它指示哪个子类型适用于公用表中的每个记录。
这种方法减少了构建和维护日志记录系统所需的代码量,同时允许您保持日志表的规范化。