我想设计一个跟踪产品开发周期的数据库。
它有4个步骤
队列中的
- 加工
- 在途中
- 递送
醇>
在队列中意味着它到达了仓库。 Porcessed意味着它被包装在花式包装材料中并检查是否有任何缺陷 在Transit意味着它目前在面包车去客户端 交付意味着交付给客户。
我知道我会有一个otiopn
tblProducts
==========
idProduct
Description
IdStatus
Status
======
Id
Status
但是我想知道是否有更好的选择,也许是一种类似于此类空值的级联样式
Products
========
IdProduct
Description
Step1
=====
Id
IdProduct
Step2 - nullable
Step2
=====
Id
Step3 - nullable
Step3
=======
Id
Step4 - nullable
例如,如果step1完成,它将有一个step1,如果step2完成,那么它将有一个step2。
我想知道哪个更正确,第一个我可以导致各种数据库不一致错误..
我无法添加标签,因为自动完成功能对我不起作用。请有人添加sql数据库设计。
经过一番研究后,我发现以下链接对解决我的问题非常有帮助。 似乎我的问题通常被称为图形算法
答案 0 :(得分:1)
很大程度上取决于实际使用情况。
例如,您可能想要创建一个名为Transition的额外实体。对于步骤之间允许的每个转换,此表可以包含一行。这将允许您添加更多步骤,将产品从一个流程迁移到另一个流程并删除步骤。
产品将引用其当前步骤并转到下一步,过程可以在Transition表中查询允许的后续步骤并将产品更新到下一步。
该程序还可以根据当前步骤和产品状态来确认转换。
答案 1 :(得分:0)
事实上,有两张桌子就足够了。一个具有步骤类型,例如1 =排队,2 =在运输等。
这使设计简单但稳定。它减少了数据重复。
在products表上添加名为StepId的列。 stepid等于你步骤表中的值(如上所述)。
这也允许您快速添加多个步骤 - 只需添加一行而不是表格。
您还可以快速对数据进行分组,以显示每个步骤。
如果不清楚,请告诉我,我会为您举一个简短的例子。