2013-10-11 3 views
0

У меня есть класс базы данных, полный объектов моего типа People. Я хочу реализовать функцию Groups, чтобы поставить People в определенные Groups. Однако, когда я удаляю Личность из группы, я просто хочу, чтобы этот человек был удален из группы, а не полностью удален.Android: база данных SQLite, копирующая запись для использования в манекене

Так или иначе, SQLite должен дать «копию» Person классу, как манекен, и когда вы его удаляете, он не удаляется из всего приложения, а только из группы?

Или я должен реализовать это совершенно по-другому. Например, одна идея, которую я придумал, заключается в следующем: Есть ALOT People, поэтому я использовал базу данных, но arent будет много Groups, так что, возможно, я мог бы просто использовать ArrayList из ArrayList s. То есть, есть arraylist groups, и каждый group имеет arraylist People, которые принадлежат группе. Таким образом, вы можете просто удалить записи из архивариуса, как вам будет угодно.

ответ

1

Мое предложение есть только на столе, которое будет содержать весь ваш тип объекта People. Добавьте столбец, чтобы указать, к какой группе принадлежит (например, имя столбца GroupNumber). Если вам нужно вывести их из группы, просто очистите столбец GroupNumber по мере необходимости. Таким образом, вы удаляете их из группы, но не из базы данных.

+0

Таким образом, это означает, что класс 'Groups' фактически не содержит никаких« Людей ». Он просто просматривает базу данных и просто отображает в списке, кого он найдет с соответствующим именем группы? – Ogen

+0

Да. Что-то вроде того. Вы также можете создать таблицу базы данных «Группа», если хотите. – Razgriz

+0

Хорошо, спасибо, что вы действительно мне помогли. Я сделаю то, что вы предложили в своем первоначальном ответе. – Ogen

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; 

, который будет выполнять триггер и просто удалить его из всех групп.

Смежные вопросы