【问题标题】:What is exact meaning for Update Anomaly in DBMS?DBMS 中更新异常的确切含义是什么?
【发布时间】:2021-07-22 11:32:14
【问题描述】:

在下图中,我们可以使用 where 子句将 RSize 更新为 500。 例如:更新 table_name 设置 Roomsize=500,其中 Room=H940。因此它将更新房间 H940 大小为 500 的所有列数据。在这种情况下更新到底有什么问题。

【问题讨论】:

  • “我们必须更新 room=... 的所有其他列”。声明不清楚
  • 只需要更新一列数据,即 Room H940 值大小已增加到 500
  • Probaby 应该是:我们必须更新 room= 'H940'" 的所有其他行中的房间大小
  • 是的,正确。所以我可以写一个查询,比如 update table_name set Roomsize=500 where Room=H940。那么问题来了。

标签: sql database oracle


【解决方案1】:

问题不在于UPDATE,而在于表定义。

明显的主键course_no,每门课程都分配有一个特定的room(数字)。

到目前为止一切顺利。但该表还包含room(此处为room_size)的属性。这违反了database normalization,不应在关系数据库设计中使用

明显的原因是此设置启用 - 如果您更新例如只有第 3 行 - 一个房间有两种不同的尺寸。这当然是错误的,你可以称之为更新异常

正确的解决方案是定义与您的course 表相关的单独room 表。

【讨论】:

  • 是的,数据库甚至不是 1NF。我建议 OP 至少将数据库结构规范化为 3NF。
猜你喜欢
  • 2011-12-14
  • 1970-01-01
  • 2017-04-19
  • 2011-05-06
  • 2013-07-22
  • 2010-11-05
  • 2016-10-27
相关资源
最近更新 更多