当前位置:  开发笔记 > 编程语言 > 正文

关系实体问题建模

如何解决《关系实体问题建模》经验,为你挑选了1个好方法。

这让我怀疑一段时间,所以我认为在这里发布它以找到一些见解是一个好主意,这是一个关系数据库建模问题/疑问

我有以下问题:

我有"问题"必须处于特定的"状态",所有状态的变化都必须经过审计.

我已经找到了两个解决方案,但我真的看不出它们之间的区别,如果有的话......你怎么看?

这是两张图的图像.

编辑:

选项A:表"questions"不应包含state_id,Question_State不应包含"id"字段.抱歉错误.

编辑2:

感谢所有现实世界的例子和见解,但这是一个学术问题,而不是真实世界相关的:).

图表http://i38.tinypic.com/2v27epl.png



1> Ian Varley..:

我认为你所要问的要点是:问题的状态是否应该基于问题和状态之间的中间表,该表具有时间组件(A)或表应该更加静态,但是具有面向日志旁边的历史表(B).

(注意:如果你想做(A)的纯版本,那么Boofus是对的,你可能也不会把state_id放在Questions表中,因为它是多余的;但这肯定会带来不便,因为它会使简单查询以便在特定状态下获取问题更加困难.所以你在这里有一个混合版本.)

一般来说,如果保留有关状态的历史信息的要求实际上仅用于审计目的 - 也就是说,如果应用程序本身不会定期查询 - 那么你可能最好选择B,因为它是一个更简单(实际上只有一个"问题"表,带有状态的参考表,以及以前状态的"日志"表).我认为这表明你的意图好一点.

但是,如果应用程序语义更复杂(例如,如果您有"显示过去24小时内处于状态X的所有问题......"的查询),那么像(A)这样的方法可能更有意义.它实质上是将问题的状态变成与时间相关的事实.如果你这样做,只要知道它使事情变得复杂 - 要么你的所有查询都更难以考虑时间,要么你必须担心问题上的state_id与Questions表中的最新状态保持同步.如果你走那条路,可能会把它称为"current_state"或类似的东西,所以很明显它是一种衍生信息.

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有