【发布时间】:2010-12-06 14:09:25
【问题描述】:
我正在开发一个基于 mysql 的系统来管理来自食品加工的数据。 此时我遇到了以下具体问题:
我有一张桌子 A,里面有一些物品:
Farmer Quantity
Farmer A 1000 kg
Farmer B 500 kg
然后我有一个表 B,它是表 A 中数据的 m:n 聚合:
Batch Quantity Quality etc.
LI1 200 kg ....
LI2 12000 kg ....
为了表示 m:n 关系,我有一个连接两者的表 AB:
FK_Farmer FK_Batch
FarmerA LI1
FarmerB LI1
FarmerA LI2
现在的问题是:表 B 中的某些批次实际上是由其他批次组成的……这意味着它们是递归组合的。我很想知道在数据库设计方面实现这种情况的最佳方法是什么。
我应该在表 AB 中包含一个额外的外键来引用批次表吗?我是否不应该强制执行外键并通过同一列同时引用农民和批处理表(并添加一个标志以指示递归或其他内容)? 还有其他我忽略的明显解决方案吗?
能够通过直接 MySQL 对所有数据进行深入查询会很好,但不是必需的。
【问题讨论】:
-
我假设的批次有某种形式的层次结构,至少没有循环,所以父母不能是自己的后代?批次是否也曾被拆分,因此它们是多个批次的后代?
-
是的,不会有循环;一批不能从自身下降。我们有大约 3-4 层由其他产品制成的产品,它们以直接的层次结构组织。 A的加工导致产品B和C,产品B的加工导致D,E和F。批次可以由其他几个批次组成,是的;一个批次可能会进入多个其他批次。我需要做的是确保我们可以将批次追溯到它们的来源,同时确保重量转换等不在项目范围内。
标签: mysql database recursive-datastructures