【问题标题】:Database design for "Created By" and "Modified By"“创建者”和“修改者”的数据库设计
【发布时间】:2014-01-24 23:58:20
【问题描述】:

我有一个问题希望对数据库设计经验丰富的人来说很简单:

如果我有一个类似于 wiki 的应用程序,其中有作者和帖子(这里称为“资源”),我想表明一个作者可以“拥有”许多帖子。所以我在想一对多的关系。所以我就这么做了。

但后来我开始思考,我不仅想代表谁撰写了这篇文章,我还想知道是谁修改了它。那么这将是一个表的特定字段与另一个表之间的关系,还是什么?我不知道这将如何工作。但基本上我想记录每个资源的作者、创建者和修改者。

这是目前为止的简单模型:

更新:

我进行了更多实验,但并不知道这是否正确,我能想到的最好方法是创建两个一对多关系,在其中我重命名了创建的外键(在 MySql Workbench 中自动创建,即)分别为 created_by 和 modified_by...

我是在正确的轨道上还是这不是正确的方法? (在本例中,我将作者重命名为用户,但这并不重要)

【问题讨论】:

  • 一个资源可以多次修改吗?如果是,您是否关心将修改历史存储在数据库中?如果是,您是要自己存储修改,还是只存储修改的人?
  • 此时我并不关心历史。我只想了解为资源设置关系的正确方法,该资源可以让一个用户创作它,而另一个用户修改它。但此时我只需要保持每个的当前。我有更新,请检查问题。
  • 那么它与created_by 并没有什么不同——它只是另一个FK。虽然您可能想要引用 author.id(而不是 author.user_name)。
  • 好的,你的意思是和我最近的更新基本一样吗?即有两个外键,一个叫 created_by,另一个叫 modified_by,都引用 author_id(或最新示例中的 user_id)?
  • 好的,那么如果你们俩都提出了这个建议,并且可以确认我现在有一个正确的解决方案,那么请将其添加为答案,我会为此给予你信任!谢谢!

标签: database-design one-to-many


【解决方案1】:

根据我们通过cmets的交流...

看起来您只需要两个外键(一个用于“创建者”,另一个用于“修改者”用户),就像您在对问题的编辑中显示的那样。

【讨论】:

  • @AndersSvensson 你打赌!
  • 如果您有任何将 XML 加载到 MySql 数据库中的经验,如果您想看一下,我还有另一个问题:stackoverflow.com/questions/21336804/…
  • @AndersSvensson 对不起,我没有。
【解决方案2】:

您的 created_by 和 modified_by 应该根据 id 列与您的作者表相关联。在规范化结构中,我不会将作者的姓名存储在资源表中;只是作者的 ID。

【讨论】:

    【解决方案3】:

    我认为您会为 wiki 条目建立与不可编辑的 WIKI_ENTRY_HISTORY 表的关系,该表将按时间顺序存储特定 Wiki 页面的历史记录。同样,它会有一个 HISTORY_CODE(或任何你给它的名字),它将包含一个数字 CODE,通知 DBA 发生的事件类型(回滚、创建等) CODE 将链接与 WIKI_CODE_INFO 以 1:1 为基础,其中将包含 WIKI_CODE 的文本翻译(即 WIKI_CODE = 1 == WIKI_CODE_INFO = 'created')。

    【讨论】:

      猜你喜欢
      • 2016-11-19
      • 1970-01-01
      • 1970-01-01
      • 2015-06-06
      • 2015-08-08
      • 1970-01-01
      • 2014-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多