Мое приложение позволит пользователям иметь список контактов. Это моя текущая схема:
CREATE TABLE IF NOT EXISTS `contact` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`person_id` int(11) NOT NULL,
`create_time` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user_id` (`user_id`,`person_id`)
) ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS `contact_request` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`person_id` int(11) NOT NULL,
`create_time` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user_id` (`user_id`,`person_id`)
) ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`email_address` varchar(50) NOT NULL,
`username` varchar(32) NOT NULL,
`password` varchar(32) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email_address` (`email_address`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB;
Когда пользователь пытается добавить другого пользователя в качестве контакта, в таблице contact_request создается запись. Если пользователь, получивший запрос, отклоняет запрос, запись contact_request удаляется. Если пользователь решает принять запрос, данные из таблицы contact_request добавляются в таблицу контактов, а затем удаляются из таблицы contact_request.
Я понял, что могу сделать это другим способом, где я уроню таблицу contact_request и добавлю еще одно поле в таблицу контактов, например: состояние, указывающее, был ли контакт только что запрошен или это принятый запрос.
CREATE TABLE IF NOT EXISTS `contact` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`person_id` int(11) NOT NULL,
`status` tinyint(1) not null,
`create_time` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user_id` (`user_id`,`person_id`)
) ENGINE=InnoDB;
Я вижу преимущество в том, что у меня будет на 1 стол меньше. В настоящее время я не вижу проблемы, возникающей в результате этого изменения. Стоит ли менять это? Есть ли какие-либо другие преимущества для любого метода, о которых я мог бы не знать. Что рекомендуется?