关系数据库设计在开始时具有未知数量的属性

时间:2010-11-05 02:43:34

标签: database-design relational-database

我正在为我的毕业设计开发一个文件管理系统。

在这个项目中,用户将文档的元数据添加到关系数据库的“文档”表中。

而且,有不同类型的文件,如信件,账单等。因此,它们对每种文件类型都有不同的属性集。 (当然,一些常见的属性也像“作者”。)

用户可以使用新的属性集定义新的文档类型(或者可以使用先前由用户定义的现有属性)。当然,用户可以在插入数十个文档后添加或删除属性。

问题是我应该如何在关系数据库系统中存储这种数据? (在这种情况下是Postgres。)

我做了一些研究,找到了一些解决方案,但我无法决定该做什么。

我是否应该有一个基础文档表,并且对于每个新添加的属性,我应该创建一个单独的表(docID,value),然后在用户请求时加入它们?

或者我应该为每个具有已定义属性的文档类型创建一个新表?然后在用户要求时将它们联合起来?

或者我应该创建一个相对较大的表,比方说200个整数,200个变量,200个日期,200个浮点数等,并且它们将定义映射到每个文档类型的这些列。

作为初始要求, 用户应该可以通过任何方式订购,过滤(搜索)文档以获取某种报告。 这些文档及其属性将具有访问权限,我的意思是,它们将与我的数据库中的其他表有关系。

我在这里的主要考虑因素不是易于开发。性能和功能要求是最重要的。 因为,在我的演示中,我应该有一个数据库,其中已经插入了至少100万个文档。

如果需要,我可以提供更多信息。

感谢。

1 个答案:

答案 0 :(得分:1)

一个表存储文档。

一个表存储元数据(document_id,key,value)。

一个联接可以获取文档及其所有元数据。