2014-11-04 85 views
0

我開發一個應用程序,並跑進一對夫婦,我相信是因爲我已經建立了我的架構方式的問題。構建連接表許多一對多的關係

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

要求是鍛鍊,單位和maulers可以以不同的方式重新使用,以形成新的內容。因此,例如鍛鍊可以在模塊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

我的問題是我應該連接表實際上是鏈接到自己的父母嗎?因此,例如我改變加入到

+----------------+ 
| 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

你沒有搞砸了 - 一個單位的鍛鍊可以屬於多個模塊/課程。只要確保保持'{unit_id,exercise_id}'等等。獨特。 – 2014-11-04 20:31:27

+0

我需要能夠去特定的單位(例如),並能夠找到正確的相關課程。 沒有表的「父」的輔助外鍵沒有辦法做到這一點,似乎他們是不明確的,哪一個'course_unit'屬於'course_module' – veganista 2014-11-05 14:16:13

回答

0

我想你可以用兩種方式做到這一點。 你提到的第一個。第二個,你可以擁有所有的參考表課程,單元,模塊,像你最初一樣鍛鍊,然後有一個Course_id,Module_id,Unit_id和Exercise_id的最終Course_details表。這樣,您可以添加單個單元或練習,而不需要將它們附加到課程或模塊等。

0

這很好,我打算開發一個非常類似的系統,我想我將在未來經歷同樣的問題。所以我把你的問題看作是我的問題。

也許這並不是真的有必要存儲一個完整的演習路線。不在數據庫中......在我看來,會話數據在您的情況下會非常合適。用戶可能會從相應的unity頁面到達某個exercise。那麼,爲什麼不把父母的標識符作爲參數發送給後代的頁面呢?

我也會選擇複合主鍵。圖形來講,

EER Diagram - MySQL Workbench V6.1

+0

是的,這是我目前如何工作。我通過所有的ID的課程,模塊,單位等,但它似乎很繁瑣。 並不總是這樣,用戶會直接從「父母」身邊走過,因爲我希望能夠輕鬆地獲得他們的下一個非完整單元/模塊/練習,雖然這個問題的範圍不在 我的框架不完全支持複合鍵或我會使用它們。 – veganista 2014-11-05 14:09:29

+0

我明白了...但是你不相信它會簡化你的數據結構嗎?是否有可能通過URL/course/module/...?也許URL不會變得那麼漂亮,但事情變得更簡單:) 其他問題,假設用戶目前正在使用一些常見練習工作兩個單元。完成第一個單位後,他是否必須在其他單位重複這些常見練習?或者這些都屬於他們所屬的其他單位? – 2014-11-05 21:06:35

+0

它簡化了數據結構是的,但我不認爲它真的簡化了代碼。它需要使用一個時間變量來跟蹤用戶目前的行程。我想避免的事情。 我希望用戶能夠回到他們回來時所採取的任何課程。 是的用戶將不得不完成另一門課程的練習。 – veganista 2014-11-10 16:44:59