zoukankan      html  css  js  c++  java
  • 关于如何记录数据更改记录的两种建表方式


    title: 关于如何记录数据更改记录的两种建表方式
    date: 2018-08-08 22:07:44
    tags: 数据库

    当时要做的一个项目要包含一个权限管理功能,以为该系统中的所有人分配权限。而且这个权限管理的需求是可以把权限接近无限的下发(我感觉现实中是不会无限下发的(。・∀・)ノ),这些都先不讲。因为有权限管理就涉及到用户分组的变动,权限的使用等,但是这些操作都是应该要记录下来的。于是有了两种方案。

    1.通过一张单独的事件记录表来记录事件:

    id uid eventid etime
    • id是自增
    • uid是指用户的id,就是事件的对象
    • eventid是事件id,有另外一张表列出所有可能的事件,eventid为其id
    • etime:事件的时间
    优点:
    1. 这种方法比较直观,比较容易能想到。
    2. 操作也不是很麻烦
    缺点:
    1. 同时要操作多张表(比如要将一个人的权限删除,那么在权限表中要将其对应的记录删除,在记录表中要对这个事件进行记录)。
    2. 需要列车所有操作的可能(这好像也不是啥缺点(。^▽^))。

    2.通过增加时间字段来记录事件

    比如有一张用户-分组的表:

    id uid gid
    • id主键自增
    • uid用户id
    • gid权限组id

    如果是按照第一种方法,当一个人被分入某个权限组时,则向这张表添加相应记录,还要向记录表添加纪录。但是如果多了两个字段,starttime(起始时间),endtime(结束时间),那么就不一样了。

    id starttime endtime uid gid

    当一个用户被分配到某分组时,记录这个时间放在starttime中,当一个用户被踢出分组是记录踢出时间放到endtime中。这样的话,只要检测endtime中是否有值就可以判断用户的状态了,这样这表的作用就不仅是记录分组情况了,而且也保留记录了。

    优点:
    1. 需要建的表少了。
    2. 当有操作时不需要删除记录,只需记录时间,操作的表也少了。
    缺点:
    1. 如果某张表有频繁的操作则很容易造成数据冗余。
  • 相关阅读:
    Java I/O (1)
    hadoop集群添加新节点
    [kuangbin带你飞]专题三 Dancing Links
    Codeforces Round #580 (Div. 2)(A、B、C)
    2019 年百度之星·程序设计大赛
    [kuangbin专题] KMP
    Codeforces Round #578 (Div. 2)(A、B、C、D、E)
    二维前缀和、差分习题集
    [kuangbin带你飞]专题七 线段树
    Codeforces Round #577 (Div. 2) (A、B、C)
  • 原文地址:https://www.cnblogs.com/flytree/p/11622652.html
Copyright © 2011-2022 走看看