我有几张表,如出勤,费用,工资,休假等。
在这个系统中有多个admin,subadmin等。
我需要保留添加新信息和编辑当前数据的跟踪,同时我还要保留以前的数据。
如何设计我的数据库以跟踪此数据库。我的计划如下:
For adding track:
AddBy(id(row id of adding information),table_name,adder).
For editing track:
editBy(id(row id of adding information),table_name,field_Name,previousData,editor)
是否足以跟踪一个以及哪些数据被更改?
答案 0 :(得分:1)
我会创建一个名为operation_logs
的表格,如:
id | table_name | table_pk | operation | used_id | log_time
-----------------------------------------------------------
1 fee_table 5 INSERT 1 2014-04-15 09:10:53
2 fee_table 9 UPDATE 2 2014-04-16 09:10:53
3 fee_table 5 DELETE 1 2014-04-17 09:10:53
像这样的东西
答案 1 :(得分:1)
据我所知,这个场景基本上是在寻找触发器。 https://dev.mysql.com/doc/refman/5.1/en/create-trigger.html
触发器是在表行上执行操作(触发器定义中给出的操作之一)时调用的例程。 触发器函数将是一个存储过程 - 在您的情况下 - 将行的旧内容(如果是更新)存储到日志表中。
如果要插入数据,我只需添加“created_by”(默认为当前用户名)和created_time(默认为current_timestamp)等列。
我希望这有帮助!
答案 2 :(得分:0)
您可以在名为“userID”的所需表格中添加一列。在用户登录时的一般实践中,可以检索该特定用户的数据并将其存储在对象中。或者用户的Id可以直接存储在会话变量中,也可以存储在该对象中。
之后,在每次“添加”或“编辑”操作期间从会话中保存该用户的ID。通过这种方式,您将能够跟踪谁进行了哪种操作。
表格的其他列可能是:操作类型,操作时间。或者,如果您不希望每个任务都使用单个表,则可以将全局表与另一个名为“表名”的列一起使用。
由于
答案 3 :(得分:0)
我找到了一种技巧,任何人都可以修改或建议我。我将使用php serialize函数将我的数据保存到表中。创建一个名为history的表,如
history(id,target_table(name of the table), target_id (ID of the saved entry),create/edit/change data (serialized data of the saved row),date)
所有更改或编辑或删除的数据都使用序列化保存到此表中,当需要这些数据时,我会将它们反序列化。
答案 4 :(得分:0)
认为不同的答案更好。但你可以改为:
id | table_name | operation |previous_data(with fields)| user_id | ch_time
-----------------------------------------------------------
1 fee_table INSERT id:120,fee:250 1 2014-04-13 09:10:53
2 fee_table UPDATE id:10,fee:50 2 2014-04-16 09:10:53
3 fee_table DELETE id:120,fee:250 1 2014-04-18 09:10:53
要存储数据,请使用您的mvc序列化数据。使用php serialize()和unserialize()函数。 如: $ sqldata = array(serialize($ session_data),$ _SERVER [' PHP_AUTH_USER']);