一尘不染

传递依赖有什么问题?

sql

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

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


阅读 233

收藏
2021-03-17

共1个答案

一尘不染

我将举例说明:

-------------------------------------------------------------------
|  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,你可以很容易地得到它Instructor这样Course->Instructor
  • 如果你有一个,Instructor你将无法得到他的帮助,Course因为他可能正在教授不同的课程。
  • 如果你有一个Instructor,你可以很容易地得到他Phone这样Instructor->Phone

那意味着如果你有一个,Course那么你可以得到那个Instructor Phone意思 Course->Instructor Phone(即传递依赖)

现在针对问题:

  1. 如果您同时删除FrenchEnglish课程,那么您也将删除其讲师John Doe,并且他的电话号码将永远丢失。
  2. Instructor除非Course先为他添加一个数据库,否则无法将新数据库添加到您的数据库中,否则您可能会在Instructors table其中复制数据,甚至更糟。
  3. 如果讲师John Doe更改了他的电话号码,那么您将不得不用新信息更新他所教的所有课程,这很容易出错。
  4. 您不能从数据库中删除教师,除非您删除该教师教的所有课程或将其所有字段设置为null。
  5. 如果您决定保留讲师的出生日期怎么办?您将必须Birth DateCourses表中添加一个字段。这听起来合乎逻辑吗?为什么首先要在课程表中保留讲师信息?
2021-03-17