我正在设计一个数据库来保存一个科研项目过去和将来的数据。我试图通过删除所有与数据库无关的术语来简化讨论:)
假设我们有一个Foo和Bar对象的集合。每个条都是属于它的子。Foos和Bars都可以具有无限数量的属性(属性)。不同的属性可以有不同的数据类型,可以是数字、文本、图像、文件等。此外,每个对象的每个属性都有值的历史记录,这些值必须存储在数据库中。你知道吗
我希望能够在不编辑数据库结构的情况下添加新属性。我不必使用任何特定的数据库软件,但我希望有一个Python接口,因为小组中的每个人都可以使用Python。最后,如果数据库是基于文件的,它会很有用。你知道吗
这是一个更好地表示上述描述的图表。希望有帮助。你知道吗
我决定尝试使用SQLite,以便使用Python轻松访问基于文件的数据库。这是我采用的数据库模式:
我使用Python的sqlite3
连接到它,并pickle
将不同类型的数据放在BLOBvalue
列中。当然,这种方法的缺点是SQLite不知道value
内的内容,因此每次运行搜索时都需要检索所有内容,而且不能利用SQL查询。你知道吗
这个问题有没有更好的解决方案(例如,编码更容易、速度更快、已有的解决方案)?再说一次,我没有绑定到任何特定类型的数据库。我是一个物理学家,有一点计算机科学的背景,所以任何帮助都是感激的。你知道吗
RDF stores正是您本机所需要的。因此,包含Turtle RDF格式数据的基本“模式”如下所示:
如您所见,您可以将多个值赋给同一属性,即
prop1
的Bar_97
属性的值为20141201
、20141202
和20141209
。你知道吗有关RDF存储的列表,请参见RDF store implementations。要从Python访问RDF存储,可以使用RDFlib。要确保RDFlib返回
Foo
(包括Bar
)的所有子级,请参见RDFlib reasoning problem。你知道吗对于基于文件的RDF存储,为了保证查询的效率,存储通常被存储为多个文件。但是,您应该能够将数据导出为Turtle(或其他一些人类可读的)格式。你知道吗
最后一个观察结果是,RDF允许您从已显式声明的信息中推断数据中未显式声明的信息。也就是说,从
x rd:type :Foo
可以推断x
也是Bar
。但是,RDFlib不支持推理,因此使用RDFlib reasoning problem解决方法是可行的,但是当您需要额外的推理能力时,使用RDFlib可能无法解决。我不知道实现推理的Python实现。因此,您可能需要考虑像Jena或RDF4J这样的Java实现。你知道吗相关问题 更多 >
编程相关推荐