0

我有一个类,一个充满我People类型对象的数据库。我想实现一个Groups功能来确定People某些Groups. 但是,当我从组中删除一个人时,我只想将该人从组中删除,而不是完全删除。

那么无论如何,SQLite 是否可以将 a 的“副本”提供Person给一个类,就像一个假人一样,当你删除它时,它不会从整个应用程序中删除,只是从组中删除?

或者我应该以完全不同的方式实现它。例如,我想出的一个想法如下:有很多People这就是我使用数据库的原因,但不会有很多Groups,所以也许我可以只使用ArrayListof ArrayLists。即,有一个数组列表,groups每个group人都有一个People属于该组的数组列表。这样,您可以随意从数组列表中删除条目。

4

2 回答 2

1

我的建议只是放在包含所有People对象类型的桌子上。添加一列以表示它们属于哪个组(例如命名列GroupNumber)。如果您需要将他们从组中取出,只需根据需要清除该GroupNumber列即可。这样,您将它们从组中删除,而不是从数据库中删除。

于 2013-10-11T02:53:04.577 回答
0

您还有另一种选择,允许同一个人可能属于不同的组。

SQLite 具有VIEW并且TRIGGER ... INSTEAD OF DELETE可能对您的情况有用。

想象一下这个模式:

CREATE TABLE People(pid, Name);
CREATE TABLE Groups(gid, Name);
CREATE TABLE PeopleGroup(gid, pid);
CREATE VIEW PeopleInGroups
    SELECT People.*, Groups.* FROM People
    JOIN PeopleGroups ON PeopleGroups.pid=People.pid
    JOIN Groups ON PeopleGroups.gid=Group.gid;
CREATE TRIGGER pigd INSTEAD OF DELETE ON PeopleInGroups BEGIN
    DELETE FROM PeopleGroup WHERE pid=OLD.pid AND gid=OLD.gid;
    END;

当你这样做

 SELECT * FROM PeopleInGroups;

您将获得所有分配了组的人。

然后你也可以

DELETE FROM PeopleInGroups WHERE pid=123;

这将执行触发器并简单地从所有组中删除此人。

于 2013-10-11T10:25:43.490 回答