2016-09-16 1 views
0

私は内部に会話システムが組み込まれたGWTアプリケーションを持っています。この会話システムには、私は以下のDB構造を持っています。会話のフィルタリングと削除をサポートするようにDB構造を調整する

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=?; 

をGUIの両方がusers..thereに同じであるので、それは、user_oneとuser_twoには、この両方を更新するという点でuser_oneとuser_twoの間に違いはありませんGUIの外観だから、すべての会話を取得した、選択は次のようになります。

select * from conversation where (user_one=? or user_two=?) and filter=? order by id desc 

は、どのように私は私のように移動したときに、私が言ったようので、正常に動作(移動や削除)上記の操作を行うために、DBの構造を変更する必要がありますuser_oneの場合は、user_twoにも移動します。会話を削除すると、他の会話も削除されます。

提案?

ありがとうございます。

+0

最も簡単な解決策:2番目のフィルタフィールドを会話テーブルに追加します。 – Shadow

答えて

0

テーブルを再構成する方法は、ユーザー参加者を2人の参加者の2つの行を格納する別のテーブルに移動することです。両方の参加者は同じ列にあります。

create table if not exists conversation(
    id int(11) PRIMARY KEY AUTO_INCREMENT, 
    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 participants(
    conversation_id int NOT NULL, 
    user_id id NOT NULL, 
    PRIMARY KEY (conversation_id, user_id), 
    FOREIGN KEY (conversation_id) REFERENCES conversation(id), 
    FOREIGN KEY (user_id) REFERENCES user(id) 
); 

次にあなたが与えられたユーザーを含むすべての会話のためのマルチテーブル更新を使用することができます。

update participant p join conversation c on p.conversation_id = c.id 
set c.filter=? 
where p.conversation_id=? and p.user_id=?; 

これは、3人の以上の参加者の間でマルチウェイの会話を可能にするために、いくつかの将来の機能のために準備。

関連する問題