【问题标题】:Chaining pivot tables, too many many-to-many's? Database Design链接数据透视表,太多的多对多?数据库设计
【发布时间】:2015-08-20 19:56:34
【问题描述】:

构建功能以便管理员可以构建产品的工作流程。

  1. 进程驱动程序是客户-sku 组合。每个都需要一个工作流。

  2. 工作流由产品必须经过的仓库部门组成。部门示例有:“发货”、“收货”

  3. 每个部门都包含多个阶段、时间要求和队列占位符(用于使部门保持正确的顺序)。阶段的示例有:“QC”、“Clean”、“Box”

  4. 每个阶段都包含多个步骤、时间要求和队列占位符(用于保持阶段的正确顺序)。步骤示例有:“开始”、“停止”、“保持”

这是一个糟糕的设计吗?

【问题讨论】:

  • (a) 客户在哪里(与您的描述相关)。 (b) 为什么它是 Customer SKU,而不仅仅是 SKU? (c) 每个部门/阶段/步骤是否有一个工作流程(如您所建模的)?如果是的话,为什么不一个呢?
  • customer_skucustomersskus 的数据透视表。这是一个奇怪的设置,但我需要它来驱动整个过程。 SKU 最好被认为是 project typeorder type
  • 要么修复怪异,要么将其传播到其他所有事物中,例如。这种增强。 (C) ? (d) 您需要每个 SKU 的当前工作流程位置,还是需要每个 SKU 的步骤历史记录?
  • 您的 SQL 编码技能如何?如果我给您一个模型,您能否理解它并从中编写代码,以验证它是否为您提供了所需的东西?它看起来不像您的图表。
  • 取决于你在说什么类型的模型。我只是真的需要另一个视角。

标签: database-design many-to-many laravel-5 pivot-table has-many-through


【解决方案1】:

关系答案

如果您想要一个关系数据库,它具有关系完整性(不同于参照完整性)、关系能力(在您的问题级别,这意味着 JOIN 能力)和关系速度,即记录归档系统(典型通过将 ID 记录为每个文件中的“主键”)没有。这就是我提供的全部内容。

  1. 如果您的起始位置是您所想的电子表格,并且每个表格上都印有一个 ID 字段,那么您将无法建模任何东西。

  2. 除了这个问题之外,ID 字段还会产生许多其他问题。请从上往下阅读this Answer假教师

  3. 是的,太多的 n::m 表是不好的。从某种意义上说,它是一个危险信号,表明数据未完全标准化。当然,必须在其他任何事情完成之前完成。

试试这个,这是我认为你需要的,考虑到备用要求(请随意更具体)。

Workflow Data Model

数据模型

  • 这是一个 IDEF1X 数据模型。 IDEF1X 是建模关系数据库的标准。请注意,每一个小勾;缺口;和标记;乌鸦脚;实线与虚线;方角与圆角;表示非常具体和重要的东西。请参阅IDEF1X Notation。如果您不理解符号,您将无法理解或工作该模型。

  • IDEF1X 数据模型定义丰富,这是 UML 和其他图表甚至无法实现的。请参阅Data Model Anatomy 以获取阅读数据模型的帮助,这是与 Notation 文档不同的视角。

解决方案

  • 在考虑历史模型之前,请先查看仅当前步骤模型,并了解这一点。

  • 复合键是关系数据库中的标准费用。事实上,这是获得关系完整性(不同于参照完整性)的唯一方法,并且您需要在这种情况下可以获得的所有完整性。

  • 看看您是否可以从模型中编码,并获取您需要的所有报告和查询,每个都使用一个 SELECT。如果您需要帮助,请询问。

请随时发表评论或提出问题。

【讨论】:

  • @BrentConnor。我已添加详细信息和答案链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-11
  • 1970-01-01
  • 2011-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-27
相关资源
最近更新 更多