添加冗余数据

正确的数据模型 将任何属性只保留在它所描述的实体表中,从而避免冗余性。 如果在不同的上下文中需要属性数据,要将表进行连接。 但是连接会耗时。如果频繁进行的连接影响了性能,可以通过 复制连接数据到其他表来消除连接。

stores_demo 数据库中,manufact 表包含制造商的名称和他们的交货时间。实际的 工作数据库可能包含供应商的许多其他属性,例如地址和销售代表姓名。

manufact 的内容主要是 stock 表的补充。假设某个时间在其中很关键的应用程序频繁引用 某种特殊商品的订货至交货的时间,但不引用 manufact 的其他列。 对于每次这样的引用,数据库服务器必须读取 2 到 3 页的数据以执行查找。

可以向 stock 表添加新列 lead_time,并用 manufact 的相对应的行中的 lead_time 列的副本进行填充。 这样安排消除了查找,从而使应用程序加快。

和派生数据一样,冗余数据会占用空间,还会带来完整性方面的风险。 在上一段描述的示例中,可能会存在每个制造商的订货至交货时间的许多额外副本。 (每个制造商可能会多次出现在 stock 中。)插入或更新 manufact 的行的程序必须也更新 stock 的多个行。

完整性风险简而言之,是指数据的冗余副本可能不精确。 如果 manufact 中的订货至交货时间更改,那么 stock 列会过时,直到该列也进行更改。 使用派生数据时,应定义冗余数据可能出错的条件。

有关数据库设计的更多信息,请参阅《GBase 8s 数据库设计和实现指南》。