在关系数据库中实现面向对象的分析模式

时间:2014-03-19 23:33:24

标签: sql oop design-patterns analysis relational

我最近开始阅读Martin Fowler"分析模式"为了提高我的数据建模技能,我发现就面向对象的方法而言,这本书真的很有趣并具有启发性。但是,尽管我认为我理解大多数模式将如何转换为关系数据库模式,但我没有看到如何以实际方式实现它们。

例如,实施"测量" (非对象 - )关系数据库中的模式(第3.4章)需要:

  • 1个存放人员的表格。
  • 1个存储人物测量值的表格(N-1关系)。
  • 1表,用于存储测量数量(1-1关系)。
  • 1表,用于存储可能表征测量的现象类型(1-N关系)。

在RDBMS中,所有这些都相当于几个排序操作,以实现连接和大量需要连接的记录,特别是如果我们为每个人存储大量的人员和大量的测量。我怀疑它表现不佳。

我想,问题在于我是否对我的怀疑是正确的。如果有人能够通过书籍或其他来源向我指出正确的方向,那就是讨论这种分析模式对关系数据库的实施。

非常感谢您提前, 尼科

2 个答案:

答案 0 :(得分:1)

这并不复杂。从实体 - 关系建模的角度来看,您将描述听起来像4个实体的内容:

  • 测量
  • 数量
  • 现象类型

他们之间有一些关系:

  • 每个人都有零对多的测量;每项衡量标准衡量一人一人。
  • 每次测量都有一个且只有一个数量;每个数量都是一次性测量。
  • 每个测量描述一个唯一的现象类型;每种现象类型都有零到多的测量值。

所以...数据库中有4个表和3个关系。

如此描述的模型可能不正确:假设测量和数量之间的1:1关系是强制性的 - 每个测量都有一个数量;每个数量描述一次测量 - 是一种气味。

与1:1基数的关系通常(通常是?)表明所涉及的两个实体实际上是同一基础逻辑实体的部分视图。该模型应该重构为包含所有属性的单个实体。进行重构可以使您获得3个表和2个关系。但请注意,可选一元关系(0:1)不一定如此。

无论哪种方式都没有,只要实现逻辑实体模型的物理数据库设计具有适当的覆盖索引。

具有正确规范化模型的东西是,您通常有许多缩小的表:窄表意味着每个数据页面的行数更多,因此搜索速度更快。如果由于数据库设计存在实际性能问题,则总是可以非规范化。如果您使用非规范化模型启动,那么一旦您拥有一个包含千兆字节数据的实时数据库,投入正确的表单将变得困难且耗时。

答案 1 :(得分:0)

我不知道你提到的这本书。因此,我不明白"测量"和"数量"。我假设"测量"将与测量行为有关,即。即包含测量的日期和时间,以及"数量"是测量的值,例如180厘米,以厘米为单位的人的身高。

对于使用关系数据库的分析,star schema是一种常见方法:您将拥有一个包含数量的中心事实表,以及维度表的外键,如DatePhenomenon ,和Person