我有一个奇怪的数据库架构,无法决定它是多对多还是别的。
我有这三张桌子:
id
api_id
api_program_name
...
id
program_id
program_conditions_group_id
api_id
description
reward
...
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
id program_id program_conditions_group_id description reward
1 1 1 Lorem 10
2 1 1 Ipsum 10
3 1 1 Dolor 20
id description reward
1 Lorem Ipsum 10
好吧,现在我想用他们所有的小组获取所有程序。如果我想获取Program_Condition,我还需要知道它有哪个组。
我不知道该设计是否正确以及它是否是多对多的,即使一个群组只能属于一个节目。我对这种设计感到不舒服,因为我需要经历100或甚至1000个条件,通过group_id对它们进行分组以获得一个组。
那么我在这里有什么?我甚至做得对,还是有更好的设计?
答案 0 :(得分:0)
我不认为我得到了它。
你的意思是:
计划OTM Programs_Conditions OTM Program_Conditions_Groups 要么 程序OTM Programs_Conditions MTM Program_Conditions_Groups
OTM - 一对多 MTM - 多对多
如果它是第一个选项,我建议你在" Program_Conditions_Groups"中使用fk。表,因为您可以更轻松地检索信息。
你能更多地描述你的情景吗?