【问题标题】:Database desing Mysql数据库设计 Mysql
【发布时间】:2018-02-06 15:51:51
【问题描述】:

目前我发现自己想知道在这种情况下这样做是否正确。

你看我有一个数据库,例如 Warehouse

我这个数据库有两个表:

[表项用于保存系统增删改查记录的项]

  1. Items(其列是)
    • TAG_ID
    • P_NUMBER
    • 数量
    • 类型
    • 位置
    • 描述
    • 原因
    • 用户ID
    • 日期

【lastchanges表用于保存系统已更改的项目】

  1. lastchanges(其列是)
    • 身份证
    • 标签ID
    • 号码
    • 用户ID
    • 动作
    • 约会

现在我被要求在当前表单中添加“确切的更改内容”,例如,如果数量发生了变化,我必须在引导表单中显示前后。

我的大脑告诉我只需将表项的所有列添加到 lastchanges 中,然后将更改前的数据保存在这些列上,并将新修改的数据保存到项中,但是在性能方面我看到了这一点作为一个糟糕的行为,我想听听你的意见。

【问题讨论】:

标签: php html mysql twitter-bootstrap database-design


【解决方案1】:

如果我理解正确,您需要一份数据库更改历史记录。

如果这就是重点,我建议您为每个条目创建一个新行并软删除旧行。然后什么都不会丢失,您总是可以得到差异或旧值。

添加字段deleted_atcreated_at 作为日期可以为您解决问题。如果deleted_at 为空,则为当前条目,如果设置了日期,则您确切知道它何时被“覆盖”

【讨论】:

  • 问题是他需要知道发生了哪些变化,项目 'a' 包含所有这些列值,但他需要知道例如数量是否发生了变化,现在是什么以及什么那是以前。
  • 在这种情况下,需要一个更改表,包括表名和字段名。然后您可以通过建议的日期字段获取当前值和旧值。
  • 所以我是否应该听从大脑的建议,我有两种方法可以做到这一点,但这两种方法效率很低 1. 我将所有项目列添加到 lastchanges 表中,并将旧数据保留在 lastchanges 列中因此,当我要显示数据时,我会从 items 中提取新数据,并从 lastchanges 中提取旧数据。 2. 我在 lastchanges 中创建了一个列,并使用例如“~”来分隔列和值
  • 我会说是的,用 lastchanges 表来做
  • 我认为用除数分隔值应该更有效,这在客户端会很痛苦,但这是任何计算机都应该做的。
猜你喜欢
  • 1970-01-01
  • 2014-01-12
  • 2018-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-30
  • 2012-01-17
  • 2011-09-17
相关资源
最近更新 更多