2011-04-14 54 views
1

我正在设计一个Web应用程序。应用程序的逻辑基本上就是一个向导,当你在前面的步骤中做出一些选择时,它会影响在后续步骤中选择项目的可能性。MySQL数据库体系结构 - 多种类型的相互依赖的项目

USECASE:

步骤1 - 用户选择使用ITEM1和ITEM2

步骤2 - 用户必须使用一个选择项目3或ITEM4,依赖于选择的在步骤1中

步骤3 - 用户可以选择使用项目5或项目6或项目7或项目8,取决于步骤1中的选项和步骤2

所有描述项目repr不同的产品具有多种属性。不同物品的总数可能会达到数百个,每个物品可以在多个其他物品上可靠。

我想获得关于数据库体系结构的建议。

目的:描述了数据库itemX如何需要itemY(也可能是itemZ,itemN,...)

我想知道如何能够依赖那些在数据库中实现,因为有千在应用程序代码中的'switch's'和'if'行是不正确的。

谢谢。

+0

您能澄清我们是否在讨论决策树(itemX只能从单个父项目Y到达),或者DAG(itemX可能通过多个父项目itemY,itemZ ...达到)。此外,在向导中的一个步骤itemX中,下一个选择仅取决于itemX还是执行之前选择的项目(到目前为止的路径)会影响可能的后续步骤? – Elad 2011-04-14 14:44:27

回答

1

有一点是肯定的。您需要将关联存储在单独的联接表中。让我们调用这个product_dependency_tb。在正常情况下,(比如说调查问卷管理),所有的依赖关系都是相同的类型,因此对于每个条目,都会有一个依赖项目列表。但是由于您还需要为表名称存储额外的元数据,因此我认为这是一个体面的解决方案。

的加入(缔合)表的

结构:

product_id --- Enabled_product_Table --- Enabled_Product_Id 

Itemx   Table1     ItemY 
    .    Table2     ItemZ 

现在,当您查询相关记录,当然你需要一些额外的逻辑在应用程序层(或者你可以这样写的过程)。 (更确切地说,您需要以迭代模式运行select查询以获取所有相关产品)。

如果您担心性能,那么您还可以将特定表的enabled_product_ids组合在一起。 (作为一个逗号分隔的字符串,以便您可以执行一个条件)...

+0

这可能适合我的情况,但我会等待更多的想法。谢谢! :) – Blackbeard 2011-04-14 13:21:05

+0

这就是整个权利......我相信会有更多创造性的解决方案...... – 2011-04-14 15:13:46

0

所有的尊重,你的问题应该被称为我如何分析/解决问题! 你在UI和其他设计中想到的一刻,并混合关于item/itemType的讨论!随机思考[头脑风暴]会增加解决问题的时间。

一次只想一件事,那么随着时间的推移,您将更有能力根据重点和经验处理不同的投入!

首先:基于什么,你认为每个itemType都需要table/class?因为称为itemType的实体,所以所有项必须属于itemType的STRUCTURE,因此至少通过[itemTypeId]正确!

第二:你必须选择哪一个更容易让你理解/分解问题[数据库设计或用户界面],但不是乍一看。通常如果它的知名问题首先与DB设计一起使用会非常容易,否则将开始以ui为焦点的原型UI,

所以请编辑问题并多想一想以获得更多!

祝你好运!

编辑:
问题编辑后,我明白,这个问题属于[工作流程设计。通过工作流程您可以进行动态或静态。动态需要扎实和深入的知识来连接节点并实现它们,另一方面,“静态”一个很容易实现,但需要对问题进行深入分析,以细分每个细节和每个细节,您的大脑可以想到! 对于动态工作流程,我强烈建议研究ms-sharepoint的实现,因为它涵盖了完全可以查看的数据库设计。 [我记得他们让我在SharePoint服务3.0中有一个巨大的表,它包含超过100列,它们的工作方式类似于我认为或可能用于审计的基表!]换句话说,您将需要在应用程序中添加/删除列并在运行时将其链接到应用程序逻辑/工作流程过程。这是动态方法的主要难点来源。大规模只有少数软件包的ERP,如SAP,SAGE,MS-Dynamics Oracle Siebel crm设法解决这个问题。 希望这是有益的,我可以添加更多,如果需要!

+0

这个问题只是关于数据库设计。我只提到UI,因为我想更详细地说明将使用数据库的应用程序最终会做什么。你有一个问题可能没有完美阐述,我会尝试编辑它。 – Blackbeard 2011-04-14 13:10:42

+0

对不起,如果我误解了,但真的只是想帮助! – 2011-04-14 13:16:37

+0

当然,谢谢你。创新的批评总是受欢迎的。回答正确的问题有时比回答更困难:) – Blackbeard 2011-04-14 13:19:22