我最近开始阅读Martin Fowler"分析模式"为了提高我的数据建模技能,我发现就面向对象的方法而言,这本书真的很有趣并具有启发性。但是,尽管我认为我理解大多数模式将如何转换为关系数据库模式,但我没有看到如何以实际方式实现它们。
例如,实施"测量" (非对象 - )关系数据库中的模式(第3.4章)需要:
在RDBMS中,所有这些都相当于几个排序操作,以实现连接和大量需要连接的记录,特别是如果我们为每个人存储大量的人员和大量的测量。我怀疑它表现不佳。
我想,问题在于我是否对我的怀疑是正确的。如果有人能够通过书籍或其他来源向我指出正确的方向,那就是讨论这种分析模式对关系数据库的实施。
非常感谢您提前, 尼科
答案 0 :(得分:1)
这并不复杂。从实体 - 关系建模的角度来看,您将描述听起来像4个实体的内容:
他们之间有一些关系:
所以...数据库中有4个表和3个关系。
如此描述的模型可能不正确:假设测量和数量之间的1:1关系是强制性的 - 每个测量都有一个数量;每个数量描述一次测量 - 是一种气味。
与1:1基数的关系通常(通常是?)表明所涉及的两个实体实际上是同一基础逻辑实体的部分视图。该模型应该重构为包含所有属性的单个实体。进行重构可以使您获得3个表和2个关系。但请注意,可选一元关系(0:1)不一定如此。
无论哪种方式都没有,只要实现逻辑实体模型的物理数据库设计具有适当的覆盖索引。
具有正确规范化模型的东西是,您通常有许多缩小的表:窄表意味着每个数据页面的行数更多,因此搜索速度更快。如果由于数据库设计存在实际性能问题,则总是可以非规范化。如果您使用非规范化模型启动,那么一旦您拥有一个包含千兆字节数据的实时数据库,投入正确的表单将变得困难且耗时。
答案 1 :(得分:0)
我不知道你提到的这本书。因此,我不明白"测量"和"数量"。我假设"测量"将与测量行为有关,即。即包含测量的日期和时间,以及"数量"是测量的值,例如180厘米,以厘米为单位的人的身高。
对于使用关系数据库的分析,star schema是一种常见方法:您将拥有一个包含数量的中心事实表,以及维度表的外键,如Date
,Phenomenon
,和Person
。