我有一个名为Project的实体。每个项目都有一组成员分配给它。我从每个成员那里收集一些信息,例如:年龄,身高等。其中有些是数字型,有些是文字型,有些是逻辑型(布尔型)。有几十种信息可以收集。
这是我在特定项目中收集的信息,它定义了项目本身。在单个项目中,我曾经收集过几个,比如3-5个信息。在某些项目中,我可以收集相同或类似的信息集。我感兴趣的是,正在对所有项目进行统计,我收集了特定的信息。
问题是:包含这些信息的表的架构应该是什么?拥有一个包含数十个列的大表,每行中包含许多空值,听起来不太好,特别是因为我的数据库中有数千甚至数百万个。但是,每个项目(以及尽可能多的表,多个项目),我只收集信息,听起来也不好,因为从所有项目中获取统计信息需要使用动态SQL(变量表名称 - 取决于项目)并迭代数百个。每个选项都有一个表,甚至选项类型(逻辑,文本,布尔值)似乎都不是正确的方法。
我正在使用PostgreSQL数据库。我知道,有些数据库有类似ANYTYPE的东西(例如Microsoft SQL Server中的sql_variant,或Oracle中的ANYDATA),但PostgreSQL没有,这让我有点困惑。
我很确定有更好的解决方案,但我无法弄清楚。请你帮我找一下吗?
提前感谢每一个回复。
答案 0 :(得分:4)
将您已经定义的所有属性以及哪些属性“常量”(并且对所有成员通用)放入表的实列中。对于任何动态的,您都可以使用hstore数据类型。
http://www.postgresql.org/docs/current/static/hstore.html
比Oracle的ANYDATA更好(更灵活,更快)
答案 1 :(得分:1)
根据所提供的信息,我可以理解,数据不是关系数据。我觉得你应该在这里查看NoSql选项。
答案 2 :(得分:1)