是否拆分数据以分离PostgreSQL表

时间:2010-08-01 20:07:34

标签: sql database-design optimization postgresql

我正在创建一个带有WPF前端和PostgreSQL数据库的应用程序。数据包括患者地址和供应商地址。每个邮寄地址平均约有3个联系人。我估计每个数据库有10,000到15,000个联系人记录。

在设计数据库结构时,我想到,不是将邮件地址存储在单个“联系人”表中,而是可以有一个表存储名称和其他单个数据,第二个表包含地址。然后,我可以在表之间创建关系,以便将地址与联系人匹配。

我非常清楚如何巧妙地组织各种情况,例如更改单个联系人的地址,其他联系人在同一地址的位置。

问题是:值得吗?我可以期望在存储大小方面节省多少钱吗?这会影响adversley的查询速度吗?如果我使用PostgreSQL以外的东西怎么样?

3 个答案:

答案 0 :(得分:1)

我强烈建议将其正常化。你永远不知道会遇到什么样的麻烦。 LedgerSMB具有相对不错的实体/用户/联系/位置模式,可创建非常灵活的环境。你可以在这里看到它(从第363行开始):

http://ledger-smb.svn.sourceforge.net/viewvc/ledger-smb/trunk/sql/Pg-database.sql?revision=3042&view=markup

答案 1 :(得分:0)

除非您认为大量用户将共享地址并且他们经常会更改,否则我认为无需规范化地址部分。在我工作的各个地方,看到用户表,有时它是,有时它不是 - 似乎从来没有真正以这种或那种方式制造可怕的麻烦。

在性能方面,只有10-15k的记录和正确的索引,我无法想象你会在现代硬件上注意到这种或那种方式存在太大差异(虽然从技术上讲,单独的表应该更慢)。 / p>

答案 2 :(得分:0)

我同意约书亚。一旦设置正确(规范化),将来管理应用程序中的任何更改都非常容易。