Имеется таблица:
CREATE TABLE `chat` (
`id` BIGINT(6) NOT NULL AUTO_INCREMENT,
`siteId` BIGINT(6) NOT NULL,
`clientId` BIGINT(6) NOT NULL,
`operatorId` BIGINT(6) NOT NULL,
`guest` TINYINT(1) NULL DEFAULT 1,
`theme` VARCHAR(255) NULL,
`name` VARCHAR(255) NULL,
`complete` TINYINT(1) NULL DEFAULT 0,
`created` TIMESTAMP(6) NULL DEFAULT CURRENT_TIMESTAMP(6),
PRIMARY KEY (`id`, `siteId`, `clientId`, `operatorId`),
INDEX `fk_chat_site_idx` (`siteId` ASC),
INDEX `fk_chat_client1_idx` (`clientId` ASC),
INDEX `fk_chat_user1_idx` (`operatorId` ASC),
CONSTRAINT `fk_chat_site`
FOREIGN KEY (`siteId`)
REFERENCES `site` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_chat_client1`
FOREIGN KEY (`clientId`)
REFERENCES `client` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_chat_user1`
FOREIGN KEY (`operatorId`)
REFERENCES `user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
Штука в том что привязка по полю operaotrId при создании записи в таблице будет NULL, то бишь чат изначально создается без оператора ну и как следствие запись не вставится. Убрать у поля NOT NULL
мне кажется не совсем правильным. или это не так?
Из-за этого я сделал такую табличку, соответственно основная таблица без поля operatorId.
CREATE TABLE IF NOT EXISTS `chatOperator` (
`id` INT NOT NULL AUTO_INCREMENT,
`chatId` BIGINT(6) NOT NULL,
`userId` BIGINT(6) NOT NULL,
`created` TIMESTAMP(6) NULL DEFAULT CURRENT_TIMESTAMP(6),
PRIMARY KEY (`id`, `chatId`, `userId`),
INDEX `fk_table1_chat1_idx` (`chatId` ASC),
INDEX `fk_chatOperator_user1_idx` (`userId` ASC),
CONSTRAINT `fk_table1_chat1`
FOREIGN KEY (`chatId`)
REFERENCES `chat` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_chatOperator_user1`
FOREIGN KEY (`userId`)
REFERENCES `user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
Но мне не очень нравится это т.к. в коде энтити есть поле operatorId, как в было в основной таблице.
Что можно еще сделать что бы избежать второй таблицы?
Если чат действительно, создается изначально без оператора (что странно), то тогда логично будет убрать ограничение NOT NULL
.
Если убирать не хочется, то можно завести служебного оператора, скажем, с ID = 0 и прописывать ссылку на этого оператора
NOT NULL
надо убрать из поля operatorId
. Тогда при вставке можно указывать значение NULL
, после появления operatorId
делать обновление.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Суть: Если добавлять в таблицы moderators_products и subadmins_products записи, то возможна ситуация при которой один и тот же id из таблицы users будет соответствовать...
API приложения: minSdkVersion 14 targetSdkVersion 25
Есть такая разметка, можно ли без дополнительных оберток сделать это на флексбокс? Что должно получится прикрепляю изображением
Хочу оптимизировать - записать по другому эту часть кода: