ユーザーが一度に複数の人にメッセージを送信できるメッセージ送信システムを設計しました。したがって、メッセージの受信者属性は多値です。そこで、message_recipients という別のテーブルを設計しました。
ここに私のテーブルがあります:
create table `message`(
`message_id` INT(11) NOT NULL primary key auto_increment,
`sender` VARCHAR(32) NOT NULL,
`topic` VARCHAR(100) NOT NULL,
`content` TEXT NOT NULL,
`message_date` TIMESTAMP NOT NULL ,
`readed` VARCHAR(1) NOT NULL DEFAULT 0,
`deleted_by_sender` VARCHAR(1) NOT NULL DEFAULT 0,
`deleted_by_recipient` VARCHAR(1) NOT NULL DEFAULT 0,
FOREIGN KEY(sender) REFERENCES users(user_name)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
create table `message_recipients`(
`message_id` INT NOT NULL ,
`recipient` VARCHAR(32) NOT NULL ,
PRIMARY KEY(message_id,recipient),
FOREIGN KEY(message_id) REFERENCES message(message_id) on delete cascade,
FOREIGN KEY(recipient) REFERENCES users(user_name)
)ENGINE=InnoDB default charset=utf8;
テーブルにメッセージを挿入するときは、そのメッセージを取得して、受信者または受信者と共にテーブルに挿入するmessage
必要があります。message_id
message_recipients
これが私のスクリプトです:
insert into `message`(`sender`,`topic`,`content`)
values('me','need help','how to get last inserted row');
select message_id from `message` order by `message_id` desc limit 0,1;
を取得したら、一部のユーザーを受信者としてmessage_id
に挿入できるようになりました。message_recipients
より良い、またはより最適化された方法はありますか?