数据库复杂关系

时间:2019-01-09 08:33:57

标签: php database

我已经尝试解决该系统的问题,但是我不确定如何实现这一目标

让我解释一下我想要什么:

有1个配置表,其中可以包含多个子配置,

1个子配置可以包含多个子子配置,

1个子子配置,可以包含多个子子子配置

和1个Sub-Sub-Sub-Configuration可以包含产品:

抱歉,这很令人困惑,但这是问题所在。

子配置只能包含产品。子子配置相同。

其中最棘手的部分是客户需要与所有这些子配置和产品建立连接。


所以我有一个这样的例子:

A是配置,也是唯一的配置

A1,B1和C1是配置A的子配置

A2,B2和C2是子配置A1的子子配置

A3,B3和C3是子子配置A2的子子子配置

我们将奶酪,薯条和鱼作为Sub-Sub-Sub-Configuration A3的产品。

但是在C2中也可能像牛一样。

然后,客户对奶酪和牛有真实的陈述,这意味着他选择了那些产品。

如果有任何天才可以帮助我解决这个问题,请让我知道;)

PS:我已经添加了PHP,因为这将用连接数据库的PHP代码完成。

1 个答案:

答案 0 :(得分:2)

就像Eakethet在评论中提到的那样,一个好的解决方案是为所有配置创建一个表,然后使用parent_id列引用自身。

我会做这样的事情。

+-----------+-----------------+-----------+
| config_id |      name       | parent_id |
+-----------+-----------------+-----------+
|         1 | Main            | null / 0  |
|         2 | Animal products | 1         |
|         3 | Cow             | 2         |
|         4 | Chicken         | 2         |
|         5 | Milk            | 3         |
|         6 | Cheese          | 3         |
|         7 | Egg             | 4         |
+-----------+-----------------+-----------+

这将在每个配置之间建立清晰直接的关系。需要知道鸡蛋来自哪里吗?查找父母。需要知道您从奶牛那里得到什么产品吗?以Cow的config_id为例,找到所有将其列为其父项的项目。

编辑:

进一步解释此结构。

您具有主配置(在问题中称其为A)。 Main具有用于标识它的唯一ID(config_id = 1)。在Main下面,我们有第一个子配置,我在回答中将其命名为“动物产品”。在其parent_id列中,它引用“ Main”的config_id。基本上,这是说“ Main”是其父配置。这是“主要”的子配置。

“动物产品”下面是子配置的下一层。我将我的名字命名为“ Cow”和“ Chicken”。它们都在各自的parent_id列中引用了“动物产品”的config_id。它们是“动物产品”的子子配置。

在底部有产品或子-子-子配置。 “牛奶”和“奶酪”都以“母牛”作为父母(parent_id 3),而“蛋”则以“鸡”(parent_id 4)为代表。

此操作可以根据需要继续向下扩展。如果您发现需要特定品牌的奶酪(切达奶酪或高达奶酪),则可以将其称为“奶酪”作为其父代。如果确定需要在“动物产品”和“鸡肉”之间的级别上进行配置,则可以添加名为“ Birds”的配置。设置它的parent_id以引用“动物产品”(1)的config_id,然后设置“鸡”的parent_id以引用“鸟类”的config_id。