奇怪的数据库架构 - 它是多对多的吗?

时间:2015-03-05 20:21:23

标签: mysql database database-design relational-database database-schema

我有一个奇怪的数据库架构,无法决定它是多对多还是别的。

我有这三张桌子:

表1:程序(通过API检索)

id
api_id
api_program_name
...

表2:Program_Conditions(也由API检索)

id
program_id
program_conditions_group_id
api_id
description
reward
...

表3:Program_Conditions_Groups

id
reward
description

嗯,您通常会认为Program_Conditions是数据透视表,而Program和Program_Conditions_Groups彼此是多对多的。 问题是程序可以在Program_Conditions_Groups中有许多条目,但Program_Conditions_Groups只能属于一个程序。

目的是Program_Conditions_Groups将属于某个程序的Program_Conditions中的所有条目分组,以显示它们与相同的描述和奖励分组。如果我将描述和奖励添加到Program_Conditions,它可能在许多条目中是相同的,因此它将是多余的。

根据Helio的回答

编辑

Program OTM Program_Conditions
Program_Conditions_Groups OTM Program_Conditions
(Program OTM Program_Conditions_Groups)

程序可以通过Program_Conditions拥有许多Program_Conditions_Groups。我需要通过程序访问组,并通过Program_Condition访问单个组。

编辑2:截至Walter Mitty的评论:

让我们假设这三个表格中有这些数据:

程序

id    api_program_name
1     Program One

Program_Conditions

id  program_id  program_conditions_group_id  description  reward
1   1           1                            Lorem        10
2   1           1                            Ipsum        10
3   1           1                            Dolor        20

Program_Conditions_Groups

id  description  reward
1   Lorem Ipsum  10

好吧,现在我想用他们所有的小组获取所有程序。如果我想获取Program_Condition,我还需要知道它有哪个组。

我不知道该设计是否正确以及它是否是多对多的,即使一个群组只能属于一个节目。我对这种设计感到不舒服,因为我需要经历100或甚至1000个条件,通过group_id对它们进行分组以获得一个组。

那么我在这里有什么?我甚至做得对,还是有更好的设计?

1 个答案:

答案 0 :(得分:0)

我不认为我得到了它。

你的意思是:

计划OTM Programs_Conditions OTM Program_Conditions_Groups 要么 程序OTM Programs_Conditions MTM Program_Conditions_Groups

OTM - 一对多 MTM - 多对多

如果它是第一个选项,我建议你在" Program_Conditions_Groups"中使用fk。表,因为您可以更轻松地检索信息。

你能更多地描述你的情景吗?