我正在开发一个应用程序,遇到了一些问题,我认为这些问题是由于我设置架构的方式造成的。
该应用程序的概述是一个大学类(class)系统。每门类(class)由多个模块组成,每个模块由多个单元组成,每个单元由练习组成。
一个要求是练习、单元和工具可以以不同的方式重复使用以形成新的内容。因此,例如练习 A 可以存在于模块 B 和模块 C 中。
最初,我选择了一个如下所示的数据库,为了简洁起见,我删除了除主键和外来 ID 之外的所有内容。
+---------+
| courses |
+---------+
| id |
+---------+
+----------------+
| course_modules |
+----------------+
| id |
| course_id |
| module_id |
+----------------+
+---------+
| modules |
+---------+
| id |
+---------+
+--------------+
| module_units |
+--------------+
| id |
| module_id |
| unit_id |
+--------------+
+-------+
| units |
+-------+
| id |
+-------+
+----------------+
| unit_exercises |
+----------------+
| id |
| unit_id |
| exercise_id |
+----------------+
+-----------+
| exercises |
+-----------+
| id |
+-----------+
到目前为止,我似乎已经搞砸了。
给定一个特定的unit_exercise
我无法知道它属于哪个类(class),因为我无法可靠地向上移动“链”,因为不可能知道哪个 module_unit
这是指。
我的问题是我的连接表实际上也应该链接到它们的父表吗?例如,我将连接更改为
+----------------+
| course_modules |
+----------------+
| id |
| course_id |
| module_id |
+----------------+
+-------------------+
| module_units |
+-------------------+
| id |
| course_modules_id |
| module_id |
| unit_id |
+-------------------+
+----------------+
| unit_exercises |
+----------------+
| id |
| module_unit_id |
| unit_id |
| exercise_id |
+----------------+
最初,包含此信息似乎是多余的,但我越看越觉得它是必需的。
最佳答案
我认为你可以通过两种方式做到这一点。 第一个就是你提到的。第二个,您可以像最初一样拥有所有引用表类(class)、单元、模块、练习,然后拥有包含 Course_id、Module_id、Unit_id 和Exercise_id 的最终 Course_details 表。这样您就可以添加单独的单元或练习,而无需将它们附加到类(class)或模块等中。
关于mysql - 构建多对多关系的连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26737949/