mysql - 建模多对多一元关系和 1 :M unary relationship

标签 mysql database database-design erd

我重新开始数据库设计,我意识到我的知识存在巨大差距。

我有一个包含类别的表。每个类别可以有多个子类别,每个子类别可以属于多个 super 类别。

我想创建一个具有类别名称的文件夹,其中将包含所有子类别文件夹。 (视觉对象,如 Windows 文件夹) 所以我需要对子类别进行快速搜索。

我想知道在这种情况下使用 1:M 或 M:N 关系有什么好处? 以及如何实现每个设计?

我创建了一个 ERD 模型,它是 1:M 一元关系。 (该图还包含一个费用表,其中存储所有费用值,但在本例中不相关)

1:M unary relationship

这个设计正确吗?

多对多一元关系是否允许更快地搜索 super 类别,并且默认情况下是最佳设计吗?

我更喜欢包含 ERD 的答案

最佳答案

如果我理解正确的话,一个子类别最多可以有一个(直接) super 类别,在这种情况下,您不需要单独的表。像这样的东西应该足够了:

enter image description here

显然,您需要一个递归查询来获取所有级别的子类别,但如果您在 PARENT_ID 上放置索引,它应该相当有效。

朝相反方向(并获取所有祖先)也需要递归查询。由于这需要在 PK(自动索引)上进行搜索,因此这也应该相当有效。

有关更多想法和不同的性能权衡,请查看 this slide-show .

关于mysql - 建模多对多一元关系和 1 :M unary relationship,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11584657/

相关文章:

mysql - 帮助设置 Ruby on Rails 和 MySQL - 提供奖励

php - 在 PostgreSQL 中存储一对多或多对多关系的最佳方式是什么?

php - 父类别未显示在列表中

mysql - SELECT 语句中的数字

database - 大规模、基于时间序列的聚合操作的架构和模式

MySQL Docker 容器未将数据保存到新镜像

mysql - 我可以使用什么工具在 Mac 上构建格式良好的 SQL DB 图表?

c++ - 如何将 C++ 结构转换为数据库

mysql - 数据库设计反馈

MYSQL 获取由另一列指定的组的列中的最小值