Mysql

數據庫設計規範化電子學習門戶

  • September 27, 2020

表:

這裡className是獨一無二的

classId| className
-------|---------
   1  |  1st Class   
   2  |  2nd Class
   3  |  3rd Class
   4  |  4th Class

表:表中 的主題Subject類可以有很多subjectName但是一個類可以有唯一的subjectName

subjectId|classID |subjectName
---------|--------|----------
   1    |    1   | English   
   2    |    1   | Maths
   3    |    1   | Social
   4    |    1   | Sports    
   5    |    2   | English  
   5    |    2   | Maths
   5    |    2   | Social
   5    |    2   | Sports

表:課程

Lesson表中,許多課程可以添加到subjectID

lessonId |classID | subjectID| lessonName
---------|--------|----------|------------
   1    |  1     |   1      | Lesson 1 -The Art
   2    |  1     |   1      | Lesson 2- The soup
   3    |  1     |   2      | Lesson 1- Algebra 
   4    |  1     |   2      | Lesson 2 - Addittion

我的問題是我應該classIDlesson表中添加,因為classID已經知道因為subjectIDSubject表中。classID在表中添加Lesson是冗餘嗎?桌子上subjectID夠了嗎?**lesson**什麼是好的做法?

表:影片

同樣,我有Video與相關的表lessonID。使用者可以通過選擇課程添加多個影片。

videoId  |lessonId |classId | subjectId| VideoName
---------|-------- |--------|----------| ----------

我的問題與課桌相同。videoID被引用lessonID。我們還應該在這裡添加classIDandsubjectID嗎?因為lessonID我們可以subjectIdSubject表中辨識,subjectId我們可以從類表中辨識classID。在表中添加classID和是冗餘嗎?subjectId``video

我問這個問題以獲得最佳實踐。

冗餘通常是禁忌。盡量避免它。

用“實體”來思考你的宇宙。在數據庫“表”中為實體建模。然後設計它們之間的“關係”。

您似乎有 4 個主題,而不是 8 個。

考慮 4 個 Classes 和 4 個 Subject 之間的多對多映射表。

我不清楚Lesson的概念,而是讓我發展如何思考它:

  • 有多少種不同的課程?那就是表中有多少行Lessons
  • “課程”如何與“主題和/或“課程”相關聯。
  • 對於“多對多”,製作另一個表。
  • 對於“一對多”,只需在一個表中為JOINing另一個表添加一個 id。

也就是說,如上所述,“關係”被建模為 many:many 或 1:many。

一旦你完成了所有這些,“規範化”就沒有什麼可做的了。

引用自:https://dba.stackexchange.com/questions/276146