我有一个名为Project的实体。每个项目都有一组分配给它的成员。我从每个成员那里收集一些信息,例如年龄、身高等。其中一些是数值型的,一些是文本型的,一些是逻辑型的(布尔型)。可以收集的信息有几十种。
这是我在特定项目中收集的信息,它定义了项目本身。在单个项目中,我过去常常收集几个信息,比如3-5个。在一些项目中,我可以收集相同或相似的信息集。我感兴趣的是对所有项目进行统计,在这些项目中,我收集了特定的信息。
问题是:包含这些信息的表的体系结构应该是什么?拥有一个包含几十个列的大表,其中每一行都有许多空值,这听起来并不好,特别是因为我的数据库中将有数千个甚至数百万个空值。但是对于每个项目有一个表(和许多表一样多的项目),其中我只收集信息,这听起来也不太好,因为从所有项目中统计数据需要使用动态SQL (可变表名-取决于项目)并迭代数百个项目。另外,每个选项都有一个表,甚至是选项类型(逻辑、文本、布尔型)似乎不是正确的方法。
我使用的是PostgreSQL数据库。我知道,有些数据库有类似ANYTYPE的东西(例如,Microsoft SQL Server中的sql_variant,或者Oracle中的ANYDATA ),但PostgreSQL没有,这让我有点困惑。
我很确定有更好的解决方案,但我想不出来。你能帮我找一下吗?
提前感谢您的每一个回复。
发布于 2012-10-27 21:09:17
postgresql中内置了一个表继承功能,可以让您在表层次结构上运行查询。
在postgresql文档中查看there和there,以获得一个很好的教程。
它们解释了如何构建从一个表继承的表:父表中的所有字段都自动包括在子表中,在父表上运行的所有查询都在子表上运行(但不是在对立表或同级表上),并且结果是串联的,除非仅使用特殊关键字将查询(或子句)限定为限制为单个表。您应该小心使用约束,因为它们不会跨越表边界。换句话说,如果在父表上设置了约束,则该约束将仅限于该表,且子表或同级表可能包含受约束表中的重复行。
发布于 2012-10-27 00:51:00
将您可以定义的所有属性放入表的实际列中,这些属性是“常量”(并且对所有成员都是通用的)。对于任何动态数据类型,都可以使用hstore数据类型。
http://www.postgresql.org/docs/current/static/hstore.html
它比Oracle的ANYDATA更好(更灵活、更快)
发布于 2012-10-27 00:26:05
根据我对所提供信息的理解,这些数据不是关系型的。我觉得你应该看看这里的NoSql选项。
https://stackoverflow.com/questions/13090697
复制相似问题