许多与多对多的关系? (子类别查找)

时间:2012-03-09 10:55:45

标签: mysql many-to-many

我有一个多对多的关系,通过表“farmer2crop”链接,将农民与作物类型联系起来(例如大米,小麦,玉米,香料等)

e.g。

FARMER2CROP
f2c_id
farmer_id
crop_id

然而,一些作物需要进一步的子类别查找,例如香料(小茴香,胡椒等)

部分我认为所有香料子类型都应该是庄稼表的一部分,也许应该有一个父类别,但客户希望香料是次要查找,而大多数作物不是有父类型。

所以我可以将第三级多对多表连接到farmers2crops:

FARMERS2CROPS2SPICES
f2c_id
spice_id

但这看起来有点令人费解,是否有任何关于更好设计的建议 - 或者这是最好的交易?

提前致谢。

2 个答案:

答案 0 :(得分:1)

从逻辑上讲,您应该拥有以下表格:

农民(farmer_id,......)

CROP(crop_id,farmer_id,...)

CROPSUB(cropsub_id,crop_id ......)

使用这三个表,您可以通过连接连接所有内容(三个点表示其他可能的表字段)。

我希望这对你有所帮助。

答案 1 :(得分:1)

我会忘记farmers2crops2spices选项,对于需要IMO来说太复杂了。

简单选项:添加subcategory表+ crop.subcategory_id列(NULLable)。 但是,您最终可能会使用subsubcategorysubsubsubcategory等表格(+ crop.subsubcategory_id等)。

但我想您长期需要的是作物类别的nested set。我建议使用像Propel这样的ORM(如果你使用PHP),它将抽象所有硬件以有效地使用这样的结构。