2010-03-08 97 views
1

如果我有一个表的结构是这样的:多表连接以提高性能?

交易[TRANSID,...]

文件[的DocID,TRANSID,...]

签名者[SignerID,...]

签名[SigID,的DocID,SignerID,...]

而业务逻辑是这样的:

  • 事务可以有多个文档
  • 文件可以有多个签名
  • 而同一签名人 有 同一事务

所以,现在我的实际问题中的 多个文档的多个签名:

如果我想要查找某个特定事务中的所有文档,如果我还将TransID和DocID存储在Signer表中,性能会更好,那么我可以e较小的连接。否则,我必须通过签名>文档>交易>凭证加入交易中的所有文件。

我认为在Signer表中拥有很多关系真的很麻烦,但这样做看起来并不“正确”(似乎是更新的噩梦),但我可以看到它可能会更好直接连接的性能。思考?

TIA!

回答

11

请使用normalized版本。只有在性能成为问题时才重新考虑。另一种选择是维护危险。

+0

+1:“也似乎是更新的噩梦”。关。这是一场更新的噩梦。事实上,我们通过规范化来防止更新的噩梦 – 2010-03-09 00:04:07

+0

+1 - 规范化是关键。另外,建议不要过早优化的额外功劳! – 2010-03-09 01:37:48

+0

优秀 - 谢谢大家! – EdenMachine 2010-03-11 14:41:23

4

将它们存储为标准化表格中建议的花费。添加索引来检索您的数据并查看您的性能。虽然你有多对多的关系,但把它们看作总数的百分比。

+0

+1表示索引 - 这是首先考虑加速查询的正确方法 - 不使用非规范化结构。另外,我很乐意为您提供您的第一个赞! – 2010-03-09 01:39:05

1

我还会指出,将签署者表存储在签名者表中将不起作用,因为签署者可能涉及多个事务。

这是一个小小的简单查询,只要正确索引,联接就不太可能出问题。

+0

在当前形式中,签署者在交易完成或取消后将“过期”,因此他们不会涉及多个交易。然而,这就是未来的计划,所以有一天它会是相关的,所以+1。 – EdenMachine 2010-03-11 14:43:53