Ami*_*adi 4 database database-design relational-database
我有三个实体:
每门“课程”由若干“课”组成。课程中的“课程”可以分为“部分”,也可以不分为“部分”。
因此,课程的内容可能如下所示:
Foo Course:
Lesson 1
Lesson 2
Lesson 3
Lesson 4
Run Code Online (Sandbox Code Playgroud)
或者像这样:
Bar Course:
Section 1:
Lesson 1
Lesson 2
Section 2:
Lesson 3
Lesson 4
Run Code Online (Sandbox Code Playgroud)
因此,换句话说,一门课程可以直接有“课程”,也可以有“部分”,而“部分”又有“课程”。
从另一个角度来看,“课程”可以直接属于“课程”,也可以属于“部分”,而“部分”又属于“课程”。
我正在努力找出如何最好地在关系数据库中实现这样的结构。
如果每个“课程”都必须属于一个“部分”,那就很容易了,我可以简单地有一个“课程”表,一个带有“CourseId”列的“部分”表,以及一个带有“课程”表的“课程”表“SectionId”列。
但我的情况并不那么简单。“部分”可能作为“课程”和多个“课程”之间的中间人存在,但也可以不存在,在这种情况下,“课程”直接具有“课程”,而不存在“部分”。
对于如何在关系数据库的上下文中理想地实现这种结构的任何建议,我将不胜感激。
谢谢。
\n\n课程可以直接有“课程”,也可以有“部分”,而“部分”又有“课程”。\xc2\xa0\xc2\xa0\na“课程”可以直接属于“课程”,也可以属于属于“课程”的“部分”。
\n
Lesson[安全使用锤子] 可能在Course[木制品] 以及CourseSection[木工,基础知识]`这是一个临时模型,显示两种类型的课程和一个独立的课程,等待决策和进一步的数据建模。\xc2\xa0\xc2\xa0重复的元素显示为红色。\n
如果我没有展示几个中间步骤(在要求的简单问答格式中不可能),请原谅我。\xc2\xa0\xc2\xa0这里是最终的数据模型。
\n标准化意味着数据库中没有空值
\n可空外键是特别坏消息,严格禁止
\n“虚拟记录”不仅尴尬和可怕(影响每个SELECT访问表的人),它不是事实,而且完全没有必要
RecordIds是身体上的;反关系型,每个都需要额外的列和索引。\n
这使用关系键(由数据组成),它提供关系完整性(与引用完整性不同)
\nCourseLesson.CourseLesson标识课程中的课程,使其在课程中具有意义,独立于课程内容LessonNoSectionLesson.SectionLesson标识该部分中的课程,使其在课程和部分中具有意义,独立于课程LessonNoCourse是独占子类型,以确保:
Course_TypeLesson直接有课,并且Course_TypeSection课程附加到该部分,而不是课程。Lesson是独立且完全定义的(一次)
Lesson is used in任一类型CourseCourseLesson.AK防止Lesson在简单的情况下重复CourseSectionLesson.AK防止Lesson在分段内重复Course。进步的数据模型解决了许多问题,并希望回答您的问题。\xc2\xa0\xc2\xa0但它可能会暴露其他人,可能需要进一步定义:数据建模是一项迭代任务。\xc2\xa0\xc2\xa0请随意评论。
\n| 归档时间: |
|
| 查看次数: |
1438 次 |
| 最近记录: |