Database design 数据库设计;由“创建”;及;修改为;

Database design 数据库设计;由“创建”;及;修改为;,database-design,one-to-many,Database Design,One To Many,我有一个问题,希望对数据库设计经验丰富的人来说非常简单: 如果我有一个类似于wiki的应用程序,其中有一个作者和帖子(这里称为“资源”),我想展示一个作者可以“拥有”许多帖子。所以我在考虑一对多的关系。所以我就这么做了 但后来我开始思考,我不仅想代表这篇文章的作者,我还想知道是谁修改了它。这将是一个表的特定字段和另一个表的特定字段之间的关系,或者是什么?我不知道这是怎么回事。但基本上我想记录每个资源的作者,谁创建了它,谁修改了它 以下是迄今为止的简单模型: 更新: 我做了更多的实验,但并不知道

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

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

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

以下是迄今为止的简单模型:

更新:

我做了更多的实验,但并不知道这是否正确,我认为实现这一点的最佳方法是创建两个一对多关系,在这里我将创建的外键(即在MySql Workbench中自动创建的)分别重命名为created_by和modified_by

我走的是正确的道路还是这不是正确的方法?(在本例中,我将author重命名为user,但这并不重要)


您的“创建人”和“修改人”应基于id列重新关联到您的“作者”表。在规范化结构中,我不会将作者的姓名存储在资源表中;只有作者id。

我认为您应该为WIKI条目建立与不可编辑的WIKI_ENTRY_HISTORY表的关系,该表将按时间顺序存储特定WIKI页面的历史记录。此外,它还将有一个历史代码(或您给它起的任何名称),其中将包含一个数字代码,通知DBA发生的事件类型(回滚、创建等)。该代码将以1:1的比例链接到WIKI_代码_信息,其中将包含WIKI_代码的文本翻译(即WIKI_CODE=1==WIKI_CODE_INFO='created')。

基于我们通过评论进行的沟通


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

一个资源可以被多次修改吗?如果是,您是否关心将修改历史记录存储在数据库中?如果是,您希望存储修改本身,还是仅存储修改的人?此时,我不关心历史记录。我只想了解正确的方法设置一个资源的关系,可以让一个用户编写它,另一个用户修改它。但是现在我只需要保持每个资源的最新状态。我有一个更新,请检查问题。然后它与由创建的
没有什么区别-它只是另一个FK。尽管您可能希望引用
author.id
(而不是
作者.用户名
)。好的,那么你的意思基本上与我的最新更新相同吗?即有两个外键,一个称为created_by,另一个称为modified_by,都引用作者id(或最新示例中的用户id)?好的,那么如果你们都提出了这个建议,并且能够确认我现在有一个正确的解决方案,那么请将它作为一个答案添加进来,我会为此而称赞你们的!谢谢!@AndersSvensson,当然!如果你们有将XML加载到MySql数据库的经验,我还有另一个问题,如果你们想看看它:@AndersSvensson,对不起,我没有。