1

我需要一个简单的 GAE-J 标记系统。

正如我所看到的,被标记的实体应该具有一组键,这些键引用与其关联的标签。

标签实体应该只包含标签字符串本身,以及指向与标签关联的实体的键集合。

当实体的标签列表发生变化时,如果标签未知,系统将创建一个新标签,然后将实体的键附加到该标签的键集合中。如果标签已经存在,那么实体的键被简单地附加到标签的键集合中。

这对我来说似乎相对直截了当且没有争议,但我想对这个设计提供一些反馈,只是为了确定。

4

2 回答 2

3

为什么要存储一张Tags桌子?这似乎非常注重关系数据库,并且在数据存储之上不会具有可扩展性或特别有用。

相反,只需为每个可标记实体存储一个字符串列表。

@Persistent
private List<String> tags;

获取实体的标签将是一个简单的查找(而不是调用数据存储),查找具有该标签的其他项目将是对数据存储的一次调用:

Query query = pm.newQuery("select from Entities " +
                          "where tagNameParam in tags" +
                          "parameters String tagNameParam");

它还将使写入更快,因为您不必检查标签是否已经存在,也不必在 中创建新行Tags等。

然而,没有那么简单的是找到所有实体的所有唯一标签。

于 2010-03-28T00:35:08.427 回答
0

我正在研究数据存储(我一直在使用 JPA 而不是低级接口)。我的直接反应是实体不能拥有标签,而标签不能拥有实体。这是一个经典的多对多关系。根据我的经验,应尽可能使用自有关系。在这种情况下,您无法使用它们,因此在管理多对多时必须非常小心。

特别是没有办法使用事务来保证一致性。您应该尝试为不一致的数据存储准备代码。换句话说,两个实体中的键可能不会相互引用,如果是这种情况,您的代码不应崩溃/崩溃/爆炸。

于 2010-03-27T23:07:24.110 回答