一般属性存储在单独的表中



我正在为一个新的应用程序设计一个数据库。

对于许多表,我都有类似的"一般";属性(例如:createdate, targetDate, actualDate, author,…)

是将这些属性放在单独的表中,并与使用这些属性的所有表创建一个FK更好,还是将它们作为附加属性放在每个表中更好?

是否存在多个属性/表,其中一个选项比另一个更可取?

现在,让我们假设您有许多表:

t1
  • t2
  • tn

均与相同的creationDate,targetDateactualDate域有一定的关系。

现在,如果可能存在一些规则,根据这些规则,表中的某些字段在两个列集之间具有函数依赖甚至等价,那么对于ti和tj都有这些字段,其中i <>J使它变得冗余,这迟早会容易导致不一致。

因此,为了应对这种情况,在这种情况下,有一个generic_attributes表并通过外键或多对多表将您的记录链接到它们是有意义的。

当然,这些通用属性可以创建为

  • generic_attributes(id, att1,…)attm)

  • generic_attributes(id, name)和
  • generic_attribute_values(id, generic_attribute_id, value)

但是,如果存在相互关联,特别是功能依赖或条件功能依赖,甚至功能等价,那么单独的属性表是很有意义的。

否则,如果这些表完全不相关,则可以任选其一。

最新更新