【问题标题】:many to many normalization多对多标准化
【发布时间】:2014-08-14 04:01:12
【问题描述】:

我正在研究数据库规范化,但我无法理解一件事。 假设我们有一个多对多关系。我们有一个课程表,我们有一个学生表。多名学生可以选修多门课程。

假设我们有一个“转换”表 Course_Student,它只存储学生的主键和他选择的课程。

我的任务是在 3NF 中制作所有表格,如果某些表格不在 3NF 中,请解释原因。

我的问题是:这些表是否已经在 3NF 中,我特别关心“过渡”表。

非常感谢!

Course
id title
1  Math
2  Programming

Student
id name
1  John Stevens
2  Jack Ryan

Course_Student
course_id student_id
1         1
1         2
2         1


CREATE TABLE Course(
id int IDENTITY(1,1) PRIMARY KEY,
title varchar(100) NOT NULL
)

CREATE TABLE Student(
id int IDENTITY(1,1) PRIMARY KEY,
name varchar(50) NOT NULL
)

CREATE TABLE Course_Student(
course_id int FOREIGN KEY REFERENCES Course,
student_id int FOREIGN KEY REFERENCES Student
)

【问题讨论】:

  • 你看,我的任务是定义每个表的范式。出于某种原因,我怀疑 Course_Student 表是否是第三范式。
  • 别忘了主键,课程上的id列是PK,学生上的id列是PK,course_id和student_id列是复合键(多个主键)
  • 它在3NF中,该表的主键是(course_id,student_id)所以它没有任何属性。
  • 这是作业吗?如果是这样,你应该说明这一点。

标签: database database-design relational-database database-normalization


【解决方案1】:

根据我对规范化的理解,您的表已经在 3.5 NF (BCNF) 中。你的桌子设计很棒。

过度规范化有时可能很糟糕,但在你的情况下,它似乎完全正常。

餐桌(Course_Student)

主键应该是(course_id, student_id)

有2个外键,引用两个表:)!

【讨论】:

    【解决方案2】:

    评估范式是对数据库进行的设计,其中包括每个表的适用功能依赖关系

    如果没有后者的明确声明,所有依赖项只能假设在(所有)键上,因此根据定义,只能假设设计满足(至少)BCNF。

    【讨论】:

    • 有趣的是,尽管在这种特殊情况下,已经提供了足够的信息来推断 6NF(没有证明任何东西)。
    猜你喜欢
    • 2014-01-28
    • 1970-01-01
    • 2011-04-12
    • 2011-05-02
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 2011-12-29
    相关资源
    最近更新 更多