我的数据库设计中有一些传递性依赖项。我的上级告诉我,这些都可能导致错误。我发现很难找到可以告诉我这些依赖关系如何导致错误的资源。它们会引起什么问题?

我并不是在争辩事实,只是渴望了解它们会导致什么样的问题。

编辑以获取更多详细信息:

来自维基百科:

传递依存关系
传递依存关系是一种间接功能依存关系,其中X→Z仅依靠X→Y和Y→Z。

最佳答案

我将举例说明:

-------------------------------------------------------------------
|  Course  |    Field     |   Instructor   |  Instructor Phone    |
-------------------------------------------------------------------
|  English |  Languages   |  John Doe      |     0123456789       |
|  French  |  Languages   |  John Doe      |     0123456789       |
|  Drawing |  Art         |  Alan Smith    |     9856321158       |
|  PHP     |  Programming |  Camella Ford  |     2225558887       |
|  C++     |  Programming |  Camella Ford  |     2225558887       |
-------------------------------------------------------------------
  • 如果您有Course,则可以轻松获得它的InstructorCourse->Instructor
  • 如果您有一个Instructor,您将无法获得他的Course,因为他可能正在教不同的类(class)。
  • 如果您有Instructor,则可以轻松获得他的Phone,这样Instructor->Phone即可。

  • 这意味着如果您有一个Course,则可以获取表示Instructor PhoneCourse->Instructor Phone(即传递依赖项)

    现在针对问题:
  • 如果您同时删除了FrenchEnglish类(class),那么您还将删除其讲师John Doe,他的电话号码将永远丢失。
  • 除非先为他添加Instructor,否则无法将新的Course添加到数据库中,或者您可以用Instructors table复制数据,甚至更糟。
  • 如果讲师John Doe更改了他的电话号码,则您将不得不用新信息更新他所教的所有类(class),这很容易出错。
  • 您不能从数据库中删除教师,除非您删除该教师教的所有类(class)或将其所有字段设置为null。
  • 如果您决定保留讲师的出生日期怎么办?您将必须在Birth Date表中添加Courses字段。这听起来合乎逻辑吗?为什么首先要在类(class)表中保留讲师信息?
  • 07-27 18:36