【问题标题】:Android querying many to many relationshipsAndroid查询多对多关系
【发布时间】:2011-08-08 04:26:24
【问题描述】:

通过阅读,我了解到实现多对多关系的方法是拥有一个单独的“路由表”。这是我如何做到这一点的一个例子:

CREATE TABLE Places (_id INTEGER PRIMARY KEY, name TEXT);

CREATE TABLE Tags (_id INTEGER PRIMARY KEY, name TEXT);

CREATE TABLE RoutingTable_PlacesTags (places_id INTEGER, tag_id INTEGER, FOREIGN KEY(places_id) REFERENCES Places(_id), FOREIGN KEY(tag_id) REFERENCES tags(_id));

在我的数据库助手类中,我希望有一个方法可以将光标返回到 Places 中具有特定标签的所有行,Cursor fetchPlaces(int tagID)。 (允许在应用内按标签过滤)

什么是正确/最佳的实施方式?

我打算查询 RoutingTable_PlacesTags,使用返回的游标为 Places 构建一个数组/ID 列表,然后使用另一个方法,我称之为传递一个返回所有 ID 的列表/数组。虽然我知道这会起作用,但我确定必须有一种更清洁的方法来做到这一点?

谢谢。

【问题讨论】:

  • 考虑一下针对您拥有的规范化架构进行查询或针对非规范化表进行查询并在插入时做更多工作的成本。
  • @Garcon 嗨,我想知道我的回答是否令人满意,如果是,您是否愿意接受?
  • 完成了,伙计。很抱歉没有早点这样做。

标签: java android sqlite database-design


【解决方案1】:

我认为您可能指的是多对多关系而不是一对多。

假设你这样做了,你可以使用一条 SQL 语句来执行查询:

SELECT name
FROM Places
WHERE EXISTS(
SELECT *
FROM RoutingTable_PlacesTags
WHERE RoutingTable_PlacesTags.places_id = Places._id
AND EXISTS (
SELECT *
FROM Tags
WHERE Tags._id = RoutingTable_PlacesTags.tag_id AND Tags.name = 'Searched for tag name here'
))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-03
    • 2018-11-02
    • 2015-10-26
    • 2015-05-29
    • 2019-10-28
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多