1

我正在开发一个 android 应用程序(因此必须使用 sqlite),并且我一直在寻找一种HashSet在关系数据库中对 Java Set(即)建模的好方法。最初,我认为这将是两个具有多对多关系的表:

table name: sets
    _id integer (PK)

table name: fruits
    _id integer (PK)
    name varchar (unique, so alternate key)

table name: fruit_sets
    set_id (FK)    // combination key to prevent
    fruit_id (FK)  // duplicate fruits in each set

所以在这个数据库模型中,我很确定它可以支持如下关系:

[ apple, orange, pear ] != [ apple, orange, grape, pear ]

但,

[ apple, orange, pear ] == [ pear, apple, orange ]

所以,如果我在数据库中有:

set 1 = [ apple, orange ]
set 2 = [ orange, pear, apple ]
set 3 = [ grape, pear ]
set 4 = [ grape, orange, apple, cherry ]

select当我在 Java 中获得一个 set 时,我正在努力寻找一个 set_id 的好方法。因此,例如,如果我在 Java 中有 HashSet: [ apple, orange, pear ],我将如何构造select查询 a set_id

应该返回set_id:2

...或者有没有一种不同的更好的方法来模拟这种关系?

4

1 回答 1

0

这只是概念,但我认为这个想法很清楚

SELECT DISTINCT set_id FROM fruit_sets
WHERE set_id IN (
SELECT DISTINCT set_id FROM fruit_sets WHERE fruit_id = (SELECT _id FROM fruits WHERE name = myHashSet.size().iterator().next)
INTERSECT
SELECT DISTINCT set_id FROM fruit_sets WHERE fruit_id = (SELECT _id FROM fruits WHERE name = myHashSet.size().iterator().next)
INTERSECT
SELECT DISTINCT set_id FROM fruit_sets WHERE fruit_id = (SELECT _id FROM fruits WHERE name = myHashSet.size().iterator().next)
)
GROUP BY set_id HAVING COUNT(*) = myHashSet.size()
于 2012-06-23T23:37:20.383 回答