У меня есть приложение GWT, в котором встроена система разговора. В этой системе разговоров у меня есть следующая структура БД.Отрегулируйте структуру БД для поддержки фильтрации цепочек и удаления их
create table if not exists conversation(
id int(11) PRIMARY KEY AUTO_INCREMENT,
user_one varchar(25) NOT NULL,
user_two varchar(25) NOT NULL,
subject varchar(15) NOT NULL,
ip varchar(30) DEFAULT NULL,
date varchar(50) NOT NULL,
filter varchar(20) DEFAULT 'Inbox'
);
create table if not exists conversation_reply(
id int(11) PRIMARY KEY AUTO_INCREMENT,
reply text,
username varchar(25) NOT NULL,
ip varchar(30) DEFAULT NULL,
date varchar(50) NOT NULL,
conv_id_fk int(11) NOT NULL REFERENCES conversation(id)
);
Я реализовал механизм фильтрации, в котором вы можете перемещать беседу из папки «Входящие» в архив или «Важные» или другие. Но когда я выполнить запрос, который обновляет фильтр:
update conversation set filter=? where id=?;
Он будет обновлять это как к user_one и user_two, так как графический интерфейс такой же, как для users..there нет никакой разницы между user_one и user_two с точки зрения как выглядит GUI. Таким образом, выбор, который получает все разговоры выглядит следующим образом:
select * from conversation where (user_one=? or user_two=?) and filter=? order by id desc
Как следует изменить структуру БД, чтобы сделать операции над (перемещение и удаление) работают правильно, потому что, как я сказал, когда я двигаюсь, как user_one, он также переместится на user_two, удалив разговор из одного, он также удалит его из другого.
Предложения?
Заранее спасибо.
Простейшее решение: добавьте второе поле фильтра в таблицу бесед. – Shadow