首先,请原谅我的无知。我无法掌握如何在我试图设计的库存数据库中定义特定关系。
我打算在纸板包装上保留库存。在大多数情况下,包装公司为每个箱子设计提供一个纸板组件。例如,案例类型x
仅需要1个单位的纸板类型y
来完成装配。这是一个简单的"多对多"我要定义的关系。从tblCase
和tblCardboard
获取主键并创建新表tblCaseCardboard
等...
对我而言,麻烦源于需要多个组件的案例类型。示例:案例类型z
需要纸板组件a,b,c
才能完成装配。显然,我以前的多对多表不会为我解决这个问题。
我确信有一种有效的方法来相对定义它,而不是粗略的条件语句列表来捕获异常。任何投入将不胜感激!感谢。
答案 0 :(得分:1)
除了真实的包装数据之外,您还应该考虑建模打包规则。正如你自己所说,规则并不总是微不足道(n..n),而是依赖于案例和组件类型。这个事实自然会带来对规则进行建模的需要,并且基于这些规则能够检查包装结构的有效性。
换句话说......在你的例子中,你谈论" tvpes"这不属于您的模型。如果你想将相应的验证逻辑移出"粗略的条件语句",你只需要把它带到数据库(一种元建模:))
这是一个示例图,用于描述您的情况,如所述。
请务必妥善分析所有可能的规则,以便涵盖所有规则。如果规则比这更简单,则可以删除关联类。
答案 1 :(得分:0)
2个实体之间的理想多对多关系,实际上意味着3个实体,其中onse侧存在一对多关系,而另一个实体之间存在多对一关系。
通常,两个端点实体是目录或工作表,而两者中间的实体只存储其他表的键,加上自己的键。
您的帖子是一种情况,其中目录表(“省”表)可能与工作表混淆(“客户”表参考“省”表)。
...........................
..+---------------------+..
..| <<Catalog>> |..
..| Case |..
..+----------+----------+..
.............|.1...........
.............^.............
............/.\............
...........<...>...........
............\./............
.............v.............
.............|.*...........
..+----------+----------+..
..| <<Catalog>> |..
..| ComponentForCase |..
..+---------------------+..
.............|.*...........
.............^.............
............/.\............
...........<...>...........
............\./............
.............v.............
.............|.1...........
..+----------+----------+..
..| <<Catalog>> |..
..| CardboardComponent |..
..+---------------------+..
...........................
这是一种情况,其中目录表示标题表加上详细信息表,而不仅仅是单个表。
Case = {CaseID,CaseEtc};
CardboardComponent = {CCID,CCShortName,CCLongDescr};
ComponentForCase = {CFCID,CaseID,CCID,Qty};
并且,只有目录。
干杯。
答案 2 :(得分:0)
感谢各种输入! @Aleks和@ SJuan76都帮我看了一眼。 @ SJuan76在他的一条评论中提出了一切。 @Aleks帮助我实现了抽象。
原始模型是为2个实体(案例和纸板)设计的。添加纸板组件实际上是第三个实体的添加。我试图模拟文字2实体。
我刚刚将finished_cardboard变成了一个抽象的第三个实体。 finished_cardboard是与cardboard_components和finished_case的一对多关系。因此,允许我通过finished_cardboard中的链接与finished_case中的_components进行交互。
再次感谢大家!