Mysql
數據庫設計規範化電子學習門戶
表:類
這裡
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
我的問題是我應該
classID
在lesson
表中添加,因為classID
已經知道因為subjectID
在Subject
表中。classID
在表中添加Lesson
是冗餘嗎?桌子上subjectID
夠了嗎?**lesson**
什麼是好的做法?表:影片
同樣,我有
Video
與相關的表lessonID
。使用者可以通過選擇課程添加多個影片。videoId |lessonId |classId | subjectId| VideoName ---------|-------- |--------|----------| ----------
我的問題與課桌相同。
videoID
被引用lessonID
。我們還應該在這裡添加classID
andsubjectID
嗎?因為lessonID
我們可以subjectId
從Subject
表中辨識,subjectId
我們可以從類表中辨識classID。在表中添加classID
和是冗餘嗎?subjectId``video
我問這個問題以獲得最佳實踐。
冗餘通常是禁忌。盡量避免它。
用“實體”來思考你的宇宙。在數據庫“表”中為實體建模。然後設計它們之間的“關係”。
您似乎有 4 個主題,而不是 8 個。
考慮 4 個 Classes 和 4 個 Subject 之間的多對多映射表。
我不清楚Lesson的概念,而是讓我發展如何思考它:
- 有多少種不同的課程?那就是表中有多少行
Lessons
。- “課程”如何與“主題和/或“課程”相關聯。
- 對於“多對多”,製作另一個表。
- 對於“一對多”,只需在一個表中為
JOINing
另一個表添加一個 id。也就是說,如上所述,“關係”被建模為 many:many 或 1:many。
一旦你完成了所有這些,“規範化”就沒有什麼可做的了。