2011-09-07 126 views
1

我正在Apache服务器上用PHP构建一个Web应用程序。最佳数据存储 - 三重存储/关系数据库/其他?

该应用程序包含大量有关人员的可选数据。根据人的类别(一个人可以在五类中),他们可以选择指定或不指定数据:家庭住址(== 5个街道,城市,国家,...),工作地址(再5个字段),年龄,电话号码....当然,应用程序还存储一些额外的数据(创建,上次更新,用户名,密码,用户级别...)。

该应用程序的当前版本/过时版本在“users”表中有86个字段,并且(取决于人的类别)扩展为具有另外23个字段(1-1关系)的附加表。

所有这些都存储在Postgresql数据库中。

我在想这是否是处理这类数据的最好方法。大多数记录都有(很多)空字段,使数据库变大,查询变慢。是否值得考虑像Triple Store这样的其他解决方案,还是我担心太多,我应该保持当前的设置?这似乎很奇怪,只是为了网站的每个新用途而将表添加到表中。另一方面,我有这样的印象:三重商店并不常见。任何指针或建议如何处理?

我读过Toby Segaran和其他人的“Programming the semantic web”,但从这本书中我得到的印象是三重商店和RDF的主要优势是通过网络交换信息(这不是我的应用程序的目标)

回答

0

大多数记录有(很多)空字段

这意味着你的数据还远远没有恢复正常。

该应用的电流/过时的版本具有86个字段中的“用户”表,并且(依赖于该人的类别),扩展了产生额外表与另一个23个字段(1-1关系)。

确实,是的,距离normalized距离很远。

如果你有一个很好的理由摆脱你刚才的位置,那么第一步将更好地构建你的数据。 即使您选择移动到不同类型的DBMS例如noSQL或对象数据库。

这不仅可以节省DBMS中的空间,还可以更快地检索数据并减少需要编写的代码量(例如,您可以重复使用相同的代码来维护家庭地址,例如维护工作地址如果你有一个'地址'表和一个标记地址类型的字段)。

网络上有很多资源(除了上面的维基百科链接)描述了如何应用规范化规则(在1,2和3之后它开始有点牵扯 - 但是如果你能掌握这些规则,那么你完全有能力承担大部分任务)。

+0

想知道你是否正确,它没有正常化。我存储关于某人的各种数据(眼睛颜色,头发颜色,薪水,组织中的等级,has_badge,has_companycar,_...等)。是的,你可以把所有可以“拥有”的项目放在一个表中,并且在连接用户和“属性”之间放置一个中间表,但我不确定这会加快查询的速度(相反) 。 – user410932

+0

虽然我同意有一个表“属性”来存储可选数据,但它似乎正在朝着三重商店的方向发展......(其中所有字段都以“属性”或“对象”因为他们会这样称呼它) – user410932