我重新开始数据库设计,我意识到我的知识存在巨大差距。
我有一个包含类别的表。每个类别可以有多个子类别,每个子类别可以属于多个 super 类别。
我想创建一个具有类别名称的文件夹,其中将包含所有子类别文件夹。 (视觉对象,如 Windows 文件夹) 所以我需要对子类别进行快速搜索。
我想知道在这种情况下使用 1:M 或 M:N 关系有什么好处? 以及如何实现每个设计?
我创建了一个 ERD 模型,它是 1:M 一元关系。 (该图还包含一个费用表,其中存储所有费用值,但在本例中不相关)
这个设计正确吗?
多对多一元关系是否允许更快地搜索 super 类别,并且默认情况下是最佳设计吗?
我更喜欢包含 ERD 的答案
最佳答案
如果我理解正确的话,一个子类别最多可以有一个(直接) super 类别,在这种情况下,您不需要单独的表。像这样的东西应该足够了:
显然,您需要一个递归查询来获取所有级别的子类别,但如果您在 PARENT_ID 上放置索引,它应该相当有效。
朝相反方向(并获取所有祖先)也需要递归查询。由于这需要在 PK(自动索引)上进行搜索,因此这也应该相当有效。
有关更多想法和不同的性能权衡,请查看 this slide-show .
关于mysql - 建模多对多一元关系和 1 :M unary relationship,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11584657/