V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
lskjdfgl
V2EX  ›  MySQL

基本工资标准表数据库怎么设计

  •  
  •   lskjdfgl · 2021-08-04 15:06:02 +08:00 · 2256 次点击
    这是一个创建于 1197 天前的主题,其中的信息可能已经有所发展或是发生改变。

    数据修改的时候怎么保留历史数据

    岗位等级表
    岗位 岗位等级 基本工资 岗位工资 基础工资
    总经理 1 2000 4000 6000
    2 2000 3500 5500
    3 2000 3000 5000
    总监、副总 4 800 2600 3400
    5 800 2300 3100
    6 800 2000 2800
    部门经理 7 600 1800 2400
    8 600 1600 2200
    9 600 1400 2000
    部门副经理 10 500 1300 1800
    11 500 1200 1700
    12 500 1100 1600
    技术员 13 400 950 1350
    14 400 900 1300
    15 400 850 1250
    16 400 800 1200
    科员 17 400 850 1250
    18 400 800 1200
    19 400 750 1150
    20 400 700 1100
    8 条回复    2021-08-05 20:39:48 +08:00
    gimp
        1
    gimp  
       2021-08-04 15:17:52 +08:00
    新建一个历史表。
    saulshao
        2
    saulshao  
       2021-08-04 15:22:01 +08:00
    建一个表,名字叫 基础工资标准_HIST 。对原始表修改或删除的时候,先按照主键把记录写(插入)到新表里面
    polyang
        3
    polyang  
       2021-08-04 15:39:33 +08:00
    直接搞一个历史记录表就行了,表结构可以和基本工资标准表保持一致,然后每次修改基本工资标准表都王历史记录表里插入数据。
    PS:总经理的基本工资有点低啊[手动狗头]
    dongxiao
        4
    dongxiao  
       2021-08-04 15:49:56 +08:00
    可以考虑用拉链表
    janus77
        5
    janus77  
       2021-08-04 15:52:24 +08:00
    一张表怎么行,得多张表啊
    一张表只写基本工资和构成,有些补贴项五花八门的,也不是每个人都有,这时候就要用到补贴项表了,同理还有奖励项、罚款项等等。
    no1xsyzy
        6
    no1xsyzy  
       2021-08-05 10:05:46 +08:00   ❤️ 1
    「表格」这个叫法很诡异,它包含三种完全不同的数据
    一种是 form,正确的叫法是「表单」,但是日常也会叫表格(这可能是因为被简称为「表」之后又错误地拓展)
    一种是 table,即每一行是一条记录,每一列是一个字段,是关系型数据库的 table 。
    一种是 matrix,矩阵,组织形态上极容易与表格混淆,主要差异在于列的存在、列的数量并不固定,甚至可能是稀疏的。它和文档数据库有一些异曲同工。

    如果考虑到补贴项等等五花八门的情况,它肯定是 matrix
    matrix 用关系型数据库,是以 (行标, 列标, 值) 来存储的,每一个单元格构成一条记录。
    这样的话也可以添加一个新的字段 修改时间戳,每次查当前状态时采用 group by (行标, 列标) order by 时间戳 desc limit 1 就可以。
    当然,历史记录单独放一张表也可以,注意添加相应的抽象层。

    当然,其实还有一种策略是把它写成 csv 并 git commit (
    caroline1022
        7
    caroline1022  
       2021-08-05 10:21:23 +08:00
    如果历史记录只用来做简单的记录没有频繁查询结算的需求的话,可以用一条更简单的变更记录表,就是楼上说的 matrix 这种(之前没听说过这个名字,受教了)
    因为如果是做跟原表结构一致的历史表的话,维护开销会比较大,当原表结构有变更时,历史表也需要变更结构。更别说换了枚举值之类的情况,就更麻烦了。变更表可以以不变应万变
    EscYezi
        8
    EscYezi  
       2021-08-05 20:39:48 +08:00 via iPhone
    用一个表,加个可用性字段,修改的时候把旧数据置为不可用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4686 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 04:04 · PVG 12:04 · LAX 20:04 · JFK 23:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.