3

我有一个名为 Project 的实体。每个项目都有分配给它的一组成员。我从每个成员那里收集一些信息,例如年龄、身高等。其中一些是数字类型,一些是文本类型,一些是逻辑类型(布尔值)。有几十个信息,可以收集。

这个,我在特定项目中收集的信息,定义了项目本身。在单个项目中,我曾经收集几个信息,例如 3-5 个信息。在某些项目中,我可以收集相同或相似的信息集。我感兴趣的是对所有项目进行统计,其中我收集了特定信息。

问题是:包含这些信息的表的架构应该是什么?拥有一个包含几十列且每行中有许多空值的大表听起来并不好,尤其是因为我的数据库中将有数千甚至数百万个这样的数据。但是每个项目都有一个表(以及尽可能多的表,尽可能多的项目),其中我只收集信息,听起来也不好,因为从所有项目中进行统计需要使用动态 SQL(变量表名 - 取决于项目)并迭代数百个。每个选项也有一个表格,甚至选项类型(逻辑、文本、布尔值)似乎都不是正确的方法。

我正在使用 PostgreSQL 数据库。我知道,有些数据库有类似 ANYTYPE 的东西(例如 Microsoft SQL Server 中的 sql_variant 或 Oracle 中的 ANYDATA),但 PostgreSQL 没有,这让我有点困惑。

我很确定对此有更好的解决方案,但我无法弄清楚。请你帮我找到它好吗?

预先感谢您的每一个回复。

4

3 回答 3

4

将您已经可以定义的所有属性以及“常量”(并且对所有成员都通用)放入表的实际列中。对于任何动态的内容,您都可以使用 hstore 数据类型。

http://www.postgresql.org/docs/current/static/hstore.html

它比 Oracle 的 ANYDATA 更​​好(更灵活、更快)

于 2012-10-26T16:51:00.490 回答
1

根据我对所提供信息的理解,数据不是关系型的。我觉得你应该在这里查看 NoSql 选项。

于 2012-10-26T16:26:04.730 回答
1

postgresql 中内置了一个表继承功能,可让您在表层次结构上运行查询。

在 postgresql 文档中到处寻找一个好的教程。

These explain how to build tables inheriting from one table: all the fields in the parent table are automatically included in the child tables, and all queries run on a parent table are run on child tables (but not the opposit, or on sibling tables) and results are concatenated, unless the special keyword ALONE is used to qualify the query (or clause maybe) as restricted to a single table. You should be careful with constraints, because they do not cross table boundaries. In other words, if a constraint is set on a parent table, it will be restrained to that table alone, and child or sibling tables might contain duplicate of rows in the constrained table.

于 2012-10-27T13:09:17.273 回答