Database mySQL数据库方案中一个循环关系的求解

Database mySQL数据库方案中一个循环关系的求解,database,entity-relationship,Database,Entity Relationship,不幸的是,我不允许发布图片。所以我试着把它说清楚。我想制作一个数据库方案来保存培训计划 我有一些实体 训练,训练时间表,练习,暂停 关系是这样的: -------------1 Training 1---------- n| |1 |n Exercise | Pause 1| |n |1 --------n Tra

不幸的是,我不允许发布图片。所以我试着把它说清楚。我想制作一个数据库方案来保存培训计划

我有一些实体

训练,训练时间表,练习,暂停

关系是这样的:

   -------------1 Training 1----------
  n|                 |1              |n
Exercise             |             Pause
  1|                 |n              |1
   --------n TrainingSchedule n-------
                 EXERCISE
                    1
                    |
                    1
TRAINING 1------n BLOCK 1--------n SCHEDULE
                    1
                    |
                    1
                  PAUSE
所以。。一次训练有一堆练习,停下来, 安排。。。何时进行属于实际训练的练习或暂停在时间表中有说明。一个练习或暂停可以根据需要在时间表中出现

我提出了一个数据库方案,在其中我实现了这种循环关系——但有人告诉我,这可能会给我带来麻烦


有没有办法干净、漂亮地解决这个循环不动产问题?(我自己也找到了一个肮脏的解决方案——但不知何故我的胃不喜欢这个想法……

如果你重新组织你的模式,你不需要这些循环引用。为了让你朝正确的方向迈出一步,考虑一下:

如果一个训练记录可以有许多训练计划,并且每个训练计划可以有许多暂停和练习,然后,训练记录可以有许多暂停和/或练习,并且可以通过适当查询训练计划记录集中的数据来推断它们之间的关系,因此不需要从练习到训练或暂停到训练的直接连接

如果你使用这种思维方式,那么你的人际关系会像:

  • 训练台
    • 1->M培训计划
      • 1->M练习
      • 1->M暂停
另一种方法是将另一层添加到描述培训计划中,以便有两个表来描述该计划:

  • 培训计划-包含实际培训计划本身的数据
  • 计划元素-包含训练计划和练习/暂停表中的外键
在这种方法中,如果您的培训表包含描述计划本身的字段(即会话字段或位置字段),并且您为更具可扩展性的设计进行了设置,则您不需要在培训表中复制数据


还要问自己pauses表中将存在什么类型的记录。从你的描述来看,日程安排的暂停本质上是一段没有锻炼的时期。如果是这种情况,用不同的方法处理这些暂停可能是有意义的,因为练习和暂停本质上是描述时间段的内容,但这些时间段的描述来自两个单独的表(因此很可能有两个单独的定义)。当试图从正确的来源查询信息时,这肯定会导致问题。

好的-我想我会尝试这样的解决方案:

   -------------1 Training 1----------
  n|                 |1              |n
Exercise             |             Pause
  1|                 |n              |1
   --------n TrainingSchedule n-------
                 EXERCISE
                    1
                    |
                    1
TRAINING 1------n BLOCK 1--------n SCHEDULE
                    1
                    |
                    1
                  PAUSE
无-循环-无数据表示。。。。希望其他人也有同样的问题。
也是一个不错的

首先感谢您抽出时间!!!你提出的第一个想法也在我脑海中浮现。但我将失去与(目前)未使用的练习/暂停的联系。例如,我在想“乐高积木”。。。a Training Get练习a、B和C…a Training Get暂停a、B和C…a Training Get时间表(更有利的时间表条目),其中顺序为a、B、a、B、C、B。。。声明如下。因此,如果我切断与“C”和“a”的关系,那么“C”和“a”将丢失。。。。很抱歉设置了格式-我还可以给您发送电子邮件;)我不确定我是否理解“因此,如果我切断与培训的关系,‘C’和‘a’将丢失”这句话。如果您担心无法将练习(如练习B)和/或暂停(如暂停X)链接到训练中的记录,则这将是不正确的,除非您根本没有使用练习B或暂停X。一旦使用练习B,您将能够查询所有使用练习B的计划的培训计划表。作为查询结果的一部分,您将拥有一个培训ID,以完成从练习到培训的链接。这是你关心的吗?