首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库设计规范化电子学习门户

数据库设计规范化电子学习门户
EN

Database Administration用户
提问于 2020-09-27 11:29:04
回答 1查看 29关注 0票数 -1

表:类

在这里,className是唯一的

代码语言:javascript
复制
classId| className
-------|---------
    1  |  1st Class   
    2  |  2nd Class
    3  |  3rd Class
    4  |  4th Class

表:Subject表类中的主题可以有许多subjectName,但是类可以有唯一的subjectName

代码语言:javascript
复制
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

代码语言:javascript
复制
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已经知道了,因为Subject表中有subjectID。在classID表中添加Lesson是否是冗余的?subjectID**lesson**表中足够了吗?什么是好的练习?

表:录像

类似地,我有Video表,它与lessonID相关。用户可以通过选择课程添加多个视频。

代码语言:javascript
复制
videoId  |lessonId |classId | subjectId| VideoName
---------|-------- |--------|----------| ----------

我的问题在这里和课桌一样。videoID被引用到lessonID。在这里我们也应该添加classIDsubjectID吗?因为通过lessonID,我们可以从Subject表中识别出subjectId,而通过subjectId,我们可以从类表中识别classID。在classID表中添加subjectIdvideo表是否是冗余的?

我问这个问题是为了最好的实践。

EN

回答 1

Database Administration用户

回答已采纳

发布于 2020-09-27 19:24:38

冗余通常是不-不。尽量避免。

从“实体”的角度来思考你的宇宙。在数据库“表”中对实体建模。然后设计他们之间的“关系”。

你似乎有4门学科,而不是8门。

考虑4个类和4个主题之间的多对多映射表.

我不清楚课程的概念,相反,让我发展一下如何思考它:

  • 有多少种不同的课程?这就是要在Lessons表中拥有多少行。
  • “课”与“科目”和/或“课程”是如何联系的。
  • 对于“多对多”,再做一张桌子。
  • 对于“一对多”,只需在一个表中为JOINing设置一个id到另一个表。

也就是说,正如上面提到的,“关系”被建模为多个:多个或1:多。

一旦你完成了所有这些,“正常化”就没有什么可做了。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/276146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档