2

在这种情况下,规范化不是一般的关系数据库意义上的。

我收到了用户的报告。这些报告中的数据大致同时生成,使得在一个请求中收集的所有报告的时间戳相同。

我对数据存储还是很陌生,我知道您可以查询属性,您必须抓住祖先实体的密钥才能向下遍历......所以我想知道哪个性能更好并且“写/读/等“ 明智的。

我应该这样做:

选项1:

  • 用户(Entity,ReportBundle的祖先):一般用户信息属性
  • ReportBundle(实体,报告的祖先):时间戳
  • 报告(实体):一般数据属性

选项 2:

  • 用户(实体,报表的祖先):插入一般用户信息属性
  • 报告(实体):时间戳属性和一般数据属性
4

2 回答 2

3

由于无法进行 JOIN,我们有很多非常非规范化的模型。如果您可能期望请求超时,您应该考虑如何处理数据。

于 2013-06-18T14:55:09.390 回答
3

执行选项 2:

因为,您节省了读取和写入附加实体的时间。您还可以节省数据库操作(最终将节省资金)。

正如我从您的选项中看到的那样,无论如何您都需要检查时间戳属性,以便将其放在报告对象中就可以了,
而且您的代码也不那么复杂并且可更好地维护。

正如 Chris 和评论中提到的,使用数据存储意味着非规范化思考。

最好将数据存储两次然后进行复杂的查询,数据设计的目标应该是通过 ID 获取实体。

这样做还可以节省您可能需要的索引数量。了解这一点很重要。

索引数量有限的原因是非规范化。
对于您创建的每个索引,数据存储都会在后面创建一个新表,该表根据您的索引以正确的顺序保存数据。因此,当您使用索引时,您的数据已经存储了不止一次。这种行为的好处是写入速度更快,因为您可以并行写入所有索引表。也会读取,因为您已经根据索引以正确的顺序读取数据。

知道这一点,如果只有这 2 个选项可用,选项 2 会更好。

于 2013-06-21T07:26:01.670 回答