【发布时间】:2017-05-10 12:33:58
【问题描述】:
我有一个名为 companies 的 MySQL 表,如下所示:
+---------+-----------+-----------+
| id_comp | comp_name | id_parent |
+---------+-----------+-----------+
| 1 | comp1 | NULL |
| 2 | comp2 | 1 |
| 3 | comp3 | 2 |
| 4 | comp4 | 2 |
| 5 | comp5 | 2 |
| 6 | comp6 | 1 |
| 3 | comp3 | 6 |
| 5 | comp5 | 6 |
| 7 | comp7 | 6 |
| 4 | comp4 | 6 |
| 8 | comp8 | 4 |
+---------+-----------+-----------+
每个公司可能有多个父级(例如:comp3,它是comp2 和comp6 的子级),每个父级可能有多个子级,每个子级本身可以是多个子级的父级,依此类推。 .. 所以,它可以有无限的层次(关系)。
我研究了几种解决方案(http://www.codeproject.com/Articles/818694/SQL-queries-to-manage-hierarchical-or-parent-child、http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/),但我认为这不适合我的问题,因为同一家公司(基于id_comp 列)可以有多个父级。
对此我有两个问题:
- 如果我有数千个关系(可扩展),这是正确的方法吗?
- 在给定
name(基于id_comp是唯一的)查询的情况下,我如何选择其兄弟(相同的 parent_id)、直接父级和直接子级。李>
【问题讨论】:
-
您只关心直系父母/子女?你不需要所有的祖先/后代?
-
@Jerrad,直接上下(父母和孩子),还有兄弟们。
-
你说
name是独一无二的,但我多次看到它,因此不是UNIQUE。
标签: mysql sql performance relational-database relationships