【发布时间】:2016-12-22 14:05:39
【问题描述】:
我现在有这两张桌子:
1)
Models
id (PK) desc ...
2)
Model_Hierarchy
parent_id (PK) child_id (PK) qty
这代表了生产装配的基本结构。例如 Model id = 001, desc = "shoeA" 可以包含 2 个其他模型:
1) 型号 id = 002, desc = "upperA" 2) 型号 id = 003, desc = "soleA"
关系将在层次结构表中简单表示如下:
Model_Hierarchy
parent_id (PK) child_id (PK) qty
001 002 1
001 003 1
所以在我的应用程序中它看起来像:
name qty
shoeA---
-upperA 1
-soleA 1
这暂时有效。但是,现在我发现对于某些特定的模型关系,我还必须捕获属性size。例如,我有一个模型cuttingKniveA,我想捕获类似:
name size area (cm^2)
cuttingKniveA 35 12.4
36 12.9
37 13.6
38 13.6 *note
. .
. .
但是 *注意:我必须能够捕捉到这样一个事实,即对于某些尺寸,可以使用相同的刀具。例如,对于 38 号,使用与 37 号相同的刀!这是我苦苦挣扎的部分,我不知道如何在我的 RDBMS 中表示它。
有几种方法可以做到这一点,我不确定选择哪一种(对于未来的开发来说最有效/最清晰)。
第一种方法:
在Models 表中:
id(PK) desc
1 cuttingKniveA
2 35
3 36
4 37
在Model_Hierarchy 表中:
parent_id (PK) child_id (PK) qty
1 2 12.4
1 3 12.9
1 4 13.6
我怎么会发现size 38 使用带有size 37 的刀? IE。 model_id4.
第二种方法:
在Models 表中:
id(PK) desc
1 cuttingKniveA
2 ""
3 ""
4 ""
在Model_Hierarchy 表中:
通过添加size 属性进行扩展。
parent_id (PK) child_id (PK) size qty
1 2 35 12.4
1 3 36 12.9
1 4 37 13.6
在这里可能更容易捕捉到尺寸 38 使用相同的刀具,但我不喜欢这样的解决方案。即:
parent_id (PK) child_id (PK) size qty
1 4 38 13.6
这里有两个大问题:
1) 保持qty 一致(即,即使大小 37 和 38 与 4 的child_id 相同,它们是 2 条记录,因此更改为 1 也必须更改另一个的数量。
2)到目前为止,它验证了主键条件,即。独特的parent_id、child_id 配对。这使事情变得复杂,因为捕获此关系是Model_Hierarchy 中显示的所有关系的一小部分,因此我可以为这个小子集添加size 属性,但我宁愿不对表进行重大更改,例如更改 PK .
第三种方法:
创建一个新表来捕获size 关系,即。
parent_id (PK) child_id (PK) size (PK) qty
1 2 35 12.4
1 3 36 12.9
1 4 37 13.6
1 4 38 13.6
我看到了两个问题:
1) 与 第二种方法 中保持qty 一致的问题相同,即。如果 13.6 发生变化,它应该在两个记录中都发生变化。
2) 现在我有一个新表,它捕获的结构与我已有的表极为相似(即父 - 子 - 数量)。
还有其他一些我没有看到的更简单的方法吗?
【问题讨论】:
标签: ms-access database-design database-schema rdbms