我正在开发一个应用程序并遇到了一些问题,我认为这是由于我设置架构的方式。
该应用程序的概述是一个大学课程系统。每门课程由多个模块组成,每个模块由多个单元组成,每个单元由练习组成。
要求是可以以不同方式重复使用练习,单位和操纵者以形成新内容。因此,例如,练习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
,我无法知道它属于哪个课程,因为我无法可靠地向上移动"链#34;因为不可能知道这引用了哪个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 |
+----------------+
最初,包含这些信息似乎是多余的,但我看得越多,似乎必须要求它。
答案 0 :(得分:0)
我认为你可以通过两种方式做到这一点。 你提到的第一个。第二个,你可以拥有你最初所做的所有参考表课程,单元,模块,练习,然后有一个带有Course_id,Module_id,Unit_id和Exercise_id的最终Course_details表。这样您就可以添加单个单元或练习,而无需将它们附加到课程或模块等。
答案 1 :(得分:0)
我很乐意开发一个非常相似的系统,我想我将来会经历同样的问题。因此,我将您的问题视为我的问题。
也许没有必要将完整的路线存储到练习中。不在数据库中......在我看来,会话数据在您的情况下非常合适。用户可能会从相应的exercise
页面到达某个unity
。那么,为什么不将父母的标识符作为参数发送给后代的页面?
我也会选择复合主键。从图形上讲,