我正在使用sqlite3将数据存储在智能手机上,但目前我只是在测试它。 表格是:
type = 1 Event : eid (primary key), other columns
type = 2 Location : lid (primary key), other columns
Relation : parent (foreign key), child (foreign key), p_type, c_type
每个对象的数据库ID都存储在对象中。 Event对象包含Location对象。因此,每当查询要检索所有Event对象时,我需要与事件对象关联的所有位置对象来形成完整对象。由于Location本身就是一个单独的对象,因此我需要一个单独的Location对象表。事件对象可能包含其他对象类型,因此我们有p_type(父类型)和c_type(子类型)来标识我们想要的正确对象类型。
所以查询将是这样的:
select * from event;
select * from location where id in (select child from relation where c_type = location)
这将为我提供所有事件和位置对象,但它没有给出关联哪个事件和位置对象之间的关系。我所做的是,我有第三个问题:
select parent, child from Relation where c_type = location
然后我创建这些子对象的映射并将它们分配给父对象。 就像将所有位置对象添加到Map一样,然后将所有事件对象添加到另一个Map,并将其键设置为其数据库ID。然后我遍历Relation的结果,并设置
results contain parent, child
Map(parent).addlocation(Map.child)
我认为我不必要地使这个过程变得复杂。我主要关心的是效率,以及将结果传递回来的便利性。它不仅限于这两种对象类型。可以有更多对象,每个对象可以包含多个不同类型的对象。所以我试图找出一种方法来确保数据库不会陷入大量查询中,因为我期望经常查询数据库。