Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 数据库规范化-合并/合并表 请考虑下面的场景。_Database_Relational Database_Database Schema_Database Normalization - Fatal编程技术网

Database 数据库规范化-合并/合并表 请考虑下面的场景。

Database 数据库规范化-合并/合并表 请考虑下面的场景。,database,relational-database,database-schema,database-normalization,Database,Relational Database,Database Schema,Database Normalization,我们有一张0NF桌 学生教师表: StudentName StudentDepartment StudentDepartmentAdd TeacherName TeacherDepartment TeacherDepartmentAdd John CS London Dave Eng, CS Oxford Mike CS

我们有一张0NF桌

学生教师表:

StudentName StudentDepartment StudentDepartmentAdd TeacherName TeacherDepartment TeacherDepartmentAdd
    John          CS                  London           Dave        Eng, CS             Oxford
    Mike          CS                  London           Dave        Eng, CS             Oxford
    Chris         Eng                 Oxford           Dave        Eng, CS             Oxford
理想情况下,在标准化之后,我希望有如下表

学生表:

StudentName Department TeacherName
    John        CS         Dave
    Mike        CS         Dave
    Chris       Eng        Dave
TeacherName DepartmentName
     Dave         CS
     Dave         ENG
   Name Address
    CS   London
    ENG  Oxford
StudentName Department TeacherName
    John        CS         Dave
    Mike        CS         Dave
    Chris       Eng        Dave
   Name Address
    CS   London
    ENG  Oxford
TeacherName DepartmentName
     Dave         CS
     Dave         ENG
   Name Address
    CS   London
    ENG  Oxford
教师表:

Name 
Dave
Name 
Dave
教师部门表:

StudentName Department TeacherName
    John        CS         Dave
    Mike        CS         Dave
    Chris       Eng        Dave
TeacherName DepartmentName
     Dave         CS
     Dave         ENG
   Name Address
    CS   London
    ENG  Oxford
StudentName Department TeacherName
    John        CS         Dave
    Mike        CS         Dave
    Chris       Eng        Dave
   Name Address
    CS   London
    ENG  Oxford
TeacherName DepartmentName
     Dave         CS
     Dave         ENG
   Name Address
    CS   London
    ENG  Oxford
部门表:

StudentName Department TeacherName
    John        CS         Dave
    Mike        CS         Dave
    Chris       Eng        Dave
TeacherName DepartmentName
     Dave         CS
     Dave         ENG
   Name Address
    CS   London
    ENG  Oxford
StudentName Department TeacherName
    John        CS         Dave
    Mike        CS         Dave
    Chris       Eng        Dave
   Name Address
    CS   London
    ENG  Oxford
TeacherName DepartmentName
     Dave         CS
     Dave         ENG
   Name Address
    CS   London
    ENG  Oxford
但是,如果我遵循标准化到3NF。 我会得到

学生表:

StudentName Department TeacherName
    John        CS         Dave
    Mike        CS         Dave
    Chris       Eng        Dave
TeacherName DepartmentName
     Dave         CS
     Dave         ENG
   Name Address
    CS   London
    ENG  Oxford
StudentName Department TeacherName
    John        CS         Dave
    Mike        CS         Dave
    Chris       Eng        Dave
   Name Address
    CS   London
    ENG  Oxford
TeacherName DepartmentName
     Dave         CS
     Dave         ENG
   Name Address
    CS   London
    ENG  Oxford
学生表格的部门:

StudentName Department TeacherName
    John        CS         Dave
    Mike        CS         Dave
    Chris       Eng        Dave
TeacherName DepartmentName
     Dave         CS
     Dave         ENG
   Name Address
    CS   London
    ENG  Oxford
StudentName Department TeacherName
    John        CS         Dave
    Mike        CS         Dave
    Chris       Eng        Dave
   Name Address
    CS   London
    ENG  Oxford
TeacherName DepartmentName
     Dave         CS
     Dave         ENG
   Name Address
    CS   London
    ENG  Oxford
教师表:

Name 
Dave
Name 
Dave
教师到部门表:

StudentName Department TeacherName
    John        CS         Dave
    Mike        CS         Dave
    Chris       Eng        Dave
TeacherName DepartmentName
     Dave         CS
     Dave         ENG
   Name Address
    CS   London
    ENG  Oxford
StudentName Department TeacherName
    John        CS         Dave
    Mike        CS         Dave
    Chris       Eng        Dave
   Name Address
    CS   London
    ENG  Oxford
TeacherName DepartmentName
     Dave         CS
     Dave         ENG
   Name Address
    CS   London
    ENG  Oxford
学生表格的部门:

StudentName Department TeacherName
    John        CS         Dave
    Mike        CS         Dave
    Chris       Eng        Dave
TeacherName DepartmentName
     Dave         CS
     Dave         ENG
   Name Address
    CS   London
    ENG  Oxford
StudentName Department TeacherName
    John        CS         Dave
    Mike        CS         Dave
    Chris       Eng        Dave
   Name Address
    CS   London
    ENG  Oxford
TeacherName DepartmentName
     Dave         CS
     Dave         ENG
   Name Address
    CS   London
    ENG  Oxford
我的问题是,在数据库规范化1NF、2NF、3NF等的哪个步骤中,我可以将StudentDepartment和teacherDepartment列合并/组合到一个表中,以导出上述规范化表单


换句话说,遵循规范化规则。我最终会有一张StudentDepartment表和一张TeacherDepartment表,而不是一张学生和老师的Department表

你的问题与规范化无关。如果不物理地连接类似类型和相同属性集的表,那么您就是在问这个问题。在这方面,标准化没有优先权。基本上没有对错。这更多是关于根据特定设计设置进行平衡权衡:

选项1:具有多个表,如示例中所示: 赞成的意见: -显式数据库设计->易于阅读 -由于不需要类型列,因此所需的内存/磁盘空间较低

缺点: -当使用代理键或其他非自然键时:没有唯一的跨表标识符,这可能会使潜在的变更提交需求难以管理 -查看accross all tables需要大量的并集,特别是当两个以上的表时

选项2:有一个带有附加类型列的表: 选项1相反方向的赞成和反对意见

G***可能会为您找到很多关于该主题的资源

2个例子: 存储分层数据,例如,具有类型的单个表与具有1:1键和差异的多个表。。。 在


你写的理想化后,我想

这表明你已经得到了解决方案,比如一个练习。始终注意将任何工作重新装配到预设解决方案;在标准化的情况下,这取决于/有助于揭示数据元素之间的关系,您应该非常谨慎地对待一个或另一个解决方案背后的假设

也就是说,让我们尝试解决这个问题,记住一组标准化的表格是您的结果,但标准化是一个过程:更准确地说,从一个小数据样本中按该顺序生成1,2,3NF是一个精确的过程,在学习标准化时经常练习

首先,让我们列出所涉及的属性。此时,我将添加此数据显然需要的代理键,并用ID标识它们:

StudentID
StudentName
StudentDepartment
StudentDepartmentAdd
TeacherID
TeacherName
TeacherDepartment (repeating)
TeacherDepartmentAdd
您的数据令人困惑,因为样本很小,而且在填写的表单或报告中几乎没有提示。但我相信我可以做出两个假设: 1.顾名思义,教师部门依赖教师; 数据中每个像Dave这样的老师在他们工作的每个部门都有很多学生。如果是这种情况,那么最好将studentdept和teacherdept作为一个属性处理,这两列可以帮助您简单地计算出相关性

在这两种假设下,过程变得很熟悉,只有两个级别的重复组:

      UNF                     1NF                   2NF (and 3NF)

  _TeacherID_            _TeacherID_           _TeacherID_
   TeacherName            TeacherName           TeacherName
   TeacherDepartmentAdd   TeacherDepartmentAdd  TeacherDepartmentAdd
|  Department 
|| StudentID             _TeacherID_*          _TeacherID_*
|| StudentName           _Department_          _Department_
|| StudentDepartmentAdd
                         _TeacherID_  )*       _StudentID_*
                         _Department_ )        _Department_
                         _StudentID_            TeacherID *
                          StudentName         
                          StudentDepartmentAdd _Department_
                                                StudentDepartmentAdd

                                               _StudentID_ 
                                                StudentName         
还需要两个假设:学生和系决定教师;系决定了该系的教学地址。从小数据样本来看,这些根本不确定,但我接受它们是基于你说你应该得到的结果。在任何实际情况下,您都会要求提供更大的数据样本,或者与实际用户确认数据的结构。在此基础上,3NF与2NF相同,因此我不在上面写

因此,给出的数据与您正在寻找的结果是一致的。但是,你应该明白:

正常情况下,不会根据此类不完整信息进行归一化。 在这里,为了达到预期的结果,我们必须假设很多事情 以弥补实际数据的缺失。 这个过程的目的是确定决定因素的正确选择,但它不能取代关于数据中合理的决定关系的推理。同样,从这个案例和数据样本提供的有限信息中可以明显看出这一点。
规范化不会引入诸如TeacherID、DepartmentId等新列。@MikeSherrill'CatRecall'是的。说得好。我已经更新了。然而这个问题仍然有效。@JonathanLeffler不知道你的意思。StudentTeacherTable正被规范化为它下面的几个表。StudentTeacherTable看起来不会被规范化,除非所有学生只能有一个老师。其他备注已撤销。通过BCNF的标准化基于func
民族依赖。函数依赖性是什么?你的答案太实际,不够学术。我的问题纯粹是关于有对有错的理论。确定正确或错误的问题意味着你知道你问题的答案,而在你发表评论之后,我不再理解了。如果你能用你的发现来更新你的受众,那将是公平的。我的意思是,我确信在规范化理论中,有明确的对与错,而不是基于你想要优化它的程度的对/错。但是我不知道我的问题的答案。如果你不知道答案,为什么你确定?您正在一组不适合您的问题的规则中搜索答案。在交通法中你也找不到关于如何处理谋杀的规则。说明你的问题在“规范化法则”中有答案意味着你假设你的问题符合该“法则”,也就是说:这是搜索的正确地方。你是如何得出这个假设的?好吧,忽略我的问题,如果你愿意的话,找一些其他地方来争论。