如何跟踪添加/编辑当前信息的人员

时间:2014-04-16 11:43:47

标签: mysql database database-design

我有几张表,如出勤,费用,工资,休假等。

在这个系统中有多个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)

是否足以跟踪一个以及哪些数据被更改?

5 个答案:

答案 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']);