什么是适当的SQL(MySQL)数据结构,用于保存具有共享子类别的分层标签 - 云/类别?

时间:2013-03-06 21:39:09

标签: php mysql sql hierarchical-data

根据这篇文章Managing hierarchical data in mysql,用于保存常规分层数据的最合适的解决方案是嵌套集模型,我完全喜欢,但不幸的是我的任务稍微困难一些。我需要管理一个分层模型,其中一些子类可能有多个父类,例如交叉集。这里描述了类似的问题。

确切地说,我有一些类别的结构,其中每个项目可以属于多个类别(并且在我的路上我需要提供一些类别继承的意思,如果项目属于TV,那么它也属于Home_electronics ,所以常规标签云不会在这里做。)

tl; dr:需要一种简单的方法/方法(可能在实现中很复杂,但管理简单,如删除,添加和查找路径)来管理具有M:M关系的类别模型。

可悲的是我只限于MySQL,但是如果这个任务不能仅用SQL来解决,我将继续在PHP中实现这个功能(因此我很高兴听到任何不合适的内容)这个问题的解决方案 - 图书馆或只是来源,但这是最糟糕的情况。)

看起来我正在寻找的东西被命名为Directed Acyclic Graph(这很明显,但我可能太傻了,不能考虑:))。

看到它具有良好的可管理性的一些实现将是很好的。

顺便说一句,常规ID,ParentID,Data thing不是一个选项,因为MySQL没有递归,因此不能通过一个查询检索数据(如果你让PHP创建一个1000 JOIN的查询,它就可以了并传递给MySQL,但那是迟钝的。)

PS:仅使用MySQL不是我的决定,只是给出了,我知道任何NoSQL DBMS都会更合适。

1 个答案:

答案 0 :(得分:1)

mysql中的M到N类关系表不应该工作吗?

tbl_Category
cat_id, name


tbl_Cat_parent
cat_id, parent_cat_id

其中parent_cat_id指的是Category-> cat_id