2016-09-06 116 views
0

我想组织我的系统的某些部分,但我无法选择方便的数据表示形式来与我的应用进行交互。 所以我有数据对象的一些地方“库”,descripted如下:弱类型对象的数据库

Object1 
{ id = TypeId, field1 = value1, otherObjectSpecifedField = value2 ... } 
... 

有许多对象(例如1000)的许多类型(例如50)的。每种类型都有自己的UniqueId和他自己的描述和字段集合。

接下来的事情是,对于每个对象我有一组过滤器,它对应于此对象现在是实际的。它看起来像这样:

Filter 
{ filterName1 = filterValue, filterName2 < filterValue } 
Object // filter is applied for this object 
{ ... } 

使用这个“仓库”的过程:

  1. 在我的应用程序,我有应用程序的状态,这意味着过滤器上面。 实例:应用本地化可以“恩”(我的应用程序知道此值,并可以改变它在启动时),我们有过滤器,名为“本地化”,并在我们的资料库,我们可以用这样的: Filter { localization = 'en'} Object1 { ... } // this object i should choose when localization is en

  2. 当我的应用程序决定检查哪些obects现在是实际的时候它来到存储库并询问它:“在这里你需要一个TypeId,并且请遍历每个过滤器+对象对,并通过过滤器说出实际的对象是什么,如果你需要解决一些过滤器的价值(从上面的例子本地化),我会为你解决它们“。

  3. 然后,资源库遍历每个对象,并比较哪些是现实的过滤器,哪些不是实际的应用。因此,他检查每个对象的每个过滤器,并只在所有对象都是实际的并且在运行时执行过的情况下才给出它。

在当前实施这套fiters +对象存储在XML文件中非常特殊的XML格式,这是从舒适的应用程序来读取,但很难由人类来维持。我认为有一些地方可以优化所有流程。我认为我们可以通过对象遍历并将其过滤器与其他人进行比较。 现在我想在NoSQL面向文档的数据库方面。因为每个对象都有其独特的结构,并且可能使用选择例程,我可以选择我需要的。

也许有人对这种类型的数据库组织有什么建议?也许你知道这种类型的数据的一些特定的数据结构?

回答

0

也许我错过了一些东西,因为它看起来像我有很多不同类型的对象:一种是每TypeId。如果是这样,那么我认为这可以用一个标准的SQL数据库来完成,假设对象中的字段具有一致的类型。如果不是,它仍然可以用NoSQL数据库完成。

在SQL数据库中,每种类型都使用一个单独的表(因为它们都有自己的一组字段),并使用SQL在相应的表中进行搜索。因此,举例来说,你可以创建两个字段的表(我使用SQLite这里,不需要类型字段):

create table Object1 (field1, otherObjectSpecifiedField); 

这个表可以再有数据插入到它:

insert into Object1 values ("field1value", "otherfieldValue"); 

Filtering使用标准的SQL:

select * from Object1 where field1 = "field1value"; 

正如我提到的,这也可以用的NoSQL数据库,如MongoDB中完成。这将是这个样子的蒙戈CLI:

创建表并插入第一个对象:

db.test.insert({ id: "TypeId", field1: "value1", otherObjectSpecifedField: "value2"}); 

从表中选择的对象:

db.test.find({id: "TypeId", field1: "value1"}); 
/* { "_id" : ObjectId("57cf97060216d33b891615ba"), "id" : "TypeId", "field1" : "value1", "otherObjectSpecifedField" : "value2" } */