Database design 如何设计实体间状态不同的自定义提醒清单数据库

Database design 如何设计实体间状态不同的自定义提醒清单数据库,database-design,Database Design,我们正在开发一个系统,帮助用户管理他们的维护活动,主要是在机器等上执行 用户可以将机器添加到其目录中。不同的机器需要不同的维护方案,但其中一些机器应该能够共享相同的维护方案,同时保持机器特定的维护状态。此功能基本上是提醒用户何时执行某些活动 每个方案由多个活动组成,应每N天/月执行一次 因此,当用户定义维护方案时,应该如下所示: Maintenance Scheme - Machine type RA1 Activities: Activity1 - perform every 1 month

我们正在开发一个系统,帮助用户管理他们的维护活动,主要是在机器等上执行

用户可以将机器添加到其目录中。不同的机器需要不同的维护方案,但其中一些机器应该能够共享相同的维护方案,同时保持机器特定的维护状态。此功能基本上是提醒用户何时执行某些活动

每个方案由多个活动组成,应每N天/月执行一次

因此,当用户定义维护方案时,应该如下所示:

Maintenance Scheme - Machine type RA1
Activities:
Activity1 - perform every 1 month
Activity2 - perform every 6 months
Activity3 - perform every 12 months
...
每台机器都有自己的维护状态:

Maintenance Status - Machine RA1-004
Activities:
Activity 1 - perform in 7 days
Activity 2 - ok
Activity 3 - Warning! Perform asap
...
现在,每当我试图围绕这个用例的数据库设计来思考时,我:

  • 想出一个像意大利面条一样的结构
  • 提出松散的结构
  • 两者同时发生
例如:


这种结构允许快速识别所选方案和当前维护状态,但另一方面,传播对方案的更改似乎是一种巨大的痛苦。我的方法是否接近最优?有什么方法可以使传播更改和简化此设计变得更容易吗?

我想,IMHO,此E-R已标准化到

我还发现

  • 字段之间没有函数依赖关系
  • 没有重复记录
  • 没有多对多的关系
和, 我认为根据关系模型不能将其简化,因为:

  • 用户链接到机器,用户还定义操作和活动
  • 机器和这些动作之间的关系是通过shemestatus中的状态来定义的
此图还支持查询,例如: 哪些机器需要维护,每台机器的状态如何等


我认为E-R是最佳的,因为每个实体都是强制性的,并且支持预期的查询。

这些项目符号对于解决3NF是无用的。你的“最佳”主张是没有根据的,因为有许多合理的设计习惯来表示这种情况(见问题的重复链接)&3NF与选择它们无关。@philipxy,不管我想问的观点有多有用:第一:这个模型是否在3NF中。第二:从你提到的参考资料中,我引用了PerformanceDBA的编辑:“如果你对“最佳实践”感兴趣,大多数答案都是不正确的。最佳实践表明RDb和应用程序是独立的;它们有完全不同的设计标准。”因此,在你看来这是毫无根据的,但是由于问题没有定义最优性,所以我认为它是非冗余的,支持所需的查询,以及设计的简单性和应用程序来处理它。这个问题是关于简单性的,我看不出(如果我错了,请纠正我)任何实体都可以从另一个实体继承。@philipxy,你说“有很多合理的设计习惯”,你能提到其中一些甚至只是标题吗,因为我有兴趣了解它们,或者我应该为此创建一个单独的问题。@philipxy,您说过“3NF与选择它们无关”,我不主张3NF或规范化,因为我看到超市上运行的系统被非规范化,只有一个或两个表使用Clipper和dbaseIII+dbf运行POS的所有字段,并且这种设计不依赖任何规则,但它是实用的,并且为大量用户工作了多年。但我在这里使用它是因为它是RDBMS的主要标准,我认为它是相关的,我不想就Nosql展开辩论。这回答了你的问题吗?这是一个常见问题。在考虑发帖之前,请始终用谷歌搜索你的错误消息或你的问题/问题/目标的许多清晰、简洁和准确的措辞,有/没有你的特定字符串/名称和网站:stackoverflow.com和标签,并阅读许多答案。如果你发布一个问题,用一句话作为标题。请参阅文本上方的投票箭头鼠标(&T)。请对其他文本进行解释或引用。给出你所需要的&把它和你的问题联系起来。仅将图像用于不能表示为文本或扩充文本的内容。无法搜索或剪切粘贴图像。包括带有图像的图例/图例和说明。