簡體   English   中英

構建多對多關系的聯接表

[英]Structuring join tables for Many-to-Many relations

我正在開發應用程序,但遇到了一些問題,我認為這是由於我建立模式的方式所致。

該應用程序的概述是大學課程系統。 每個課程均由多個模塊組成,每個模塊均由多個單元組成,每個單元均由練習組成。

要求以不同的方式重復使用演習,單元和ma彈槍,以形成新的內容。 因此,例如練習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 ,我無法知道它屬於哪個路線,因為我無法可靠地向上移動“鏈”,因為無法知道module_unit指向的是哪個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    |
+----------------+

最初,包含此信息似乎是多余的,但我對它的了解越多,似乎就必須要求它。

我認為您可以通過兩種方式做到這一點。 您提到的第一個。 第二個,您可以像最初一樣擁有所有參考表course,unit,module,exercise,然后擁有一個最終的Course_details表,其中包含Course_id,Module_id,Unit_id和Exercise_id。 這樣,您可以添加單個單元或練習,而無需將其附加到課程或模塊等上。

很高興我打算開發一個非常相似的系統,並且我想我將來會遇到同樣的問題。 所以我威脅您的問題,好像是我的一樣。

也許沒有必要存儲完整的練習路徑。 不在數據庫中...在我看來,會話數據非常適合您的情況。 用戶可能會從適當的unity頁面進行某種exercise 那么,為什么不將父母的標識符作為參數發送給后代的頁面呢?

我還要選擇復合主鍵。 從圖形上講,

EER圖-MySQL Workbench V6.1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM