Mysql 动态更改记录的外键
比如说,我有一个表,其中有很多记录“employee\u hour”,另一个表的记录很少:“Revolutions\u export”<代码>员工工时有一个外键,用于Mysql 动态更改记录的外键,mysql,database,database-design,Mysql,Database,Database Design,比如说,我有一个表,其中有很多记录“employee\u hour”,另一个表的记录很少:“Revolutions\u export”员工工时有一个外键,用于营业额导出。但是,有时链接的营业额导出会过时,需要更新大量员工工时记录 当前的工作方式(这种方式变得太慢): 对于链接的营业额导出过期的每个员工工时记录,将插入一条新的、相同的员工工时记录,并插入到更新的营业额导出 我如何设计一个db/进程来尽可能有效地处理这个问题 值得注意的是: 不想使用新的营业额导出更新员工工时记录(因为这意味着为链接
营业额
导出。但是,有时链接的营业额导出
会过时,需要更新大量员工工时
记录
当前的工作方式(这种方式变得太慢):
对于链接的营业额导出
过期的每个员工工时
记录,将插入一条新的、相同的员工工时
记录,并插入到更新的营业额导出
我如何设计一个db/进程来尽可能有效地处理这个问题
值得注意的是:
营业额导出更新员工工时
记录(因为这意味着为链接的营业额导出过期的每个员工工时
记录插入新的员工工时
记录,->此列表的第4点)
overflower\u export
中跟踪另一个列是否应该使用它。无法工作,因为来自单个列的外键不能引用多个列我们要报告特定员工工作时间产生的营业额。我们通过获取员工工时记录,然后将此记录中的某一列与链接的营业额导出中的某一列相乘来实现此目的。但是,有时链接的营业额导出会过时,需要更新大量员工工时记录。考虑到您的“显著点”,我们可以考虑<代码> TunVelueExputs/COD>不能更改任何情况。您必须添加一列,该列定义导出行为实际行或过时行/存档行,并使用更新的值创建新行。在此之后,
employee\u hour
中需要更新的一些行可能会连接到新创建的行,而不是旧的行。@Akina更正,当链接的overship\u export
过期时,将插入一个新的overship\u export
,其中包含更新的值。这意味着链接到员工工时
的营业额导出
现在已过时,不能使用。那么,我如何将这些employee_hour
记录链接到新更新的overship_export
,而不更新employee_hour
本身呢?@Akina您知道您的解决方案对性能有什么影响吗?据我所知,db定义的外键不能在您的解决方案中使用。在不更新员工工作时间的情况下,如何将这些员工工作时间记录链接到新更新的营业额导出??常用更新查询:UPDATE employee\u hour SET overship\u export\u reference=new\u overship\u export\u id其中overship\u export\u reference=old\u overship\u export\u id{和其他条件}
。据我所知,db定义的外键不能用于您的解决方案中。为什么???我看不出有什么理由。。您的解决方案对性能有什么影响?我认为导出中的行数太少,您看不到任何降级效果。@Akina很遗憾,这里不允许任何更新查询。因为在这种情况下,我们将丢失更新之前链接到员工工时记录的营业额导出记录。您的解决方案基本上是“值得注意的要点”中的第1点。