CREATE TABLE `users` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`username` varchar(100) NOT NULL,
`password` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `products` (
`id` MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`),
);
CREATE TABLE `subadmins_products` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`product_id` MEDIUMINT UNSIGNED NOT NULL, -- Внешний ключ из product
`sumadmin_id` INT UNSIGNED NOT NULL, -- Внешний ключ из user
PRIMARY KEY (`id`),
FOREIGN KEY (`sumadmin_id`) REFERENCES users(`id`)
);
CREATE TABLE `moderators_products` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`product_id` MEDIUMINT UNSIGNED NOT NULL, -- Внешний ключ из product
`moderator_id` INT UNSIGNED NOT NULL, -- Внешний ключ из user,
PRIMARY KEY (`id`),
FOREIGN KEY (`moderator_id`) REFERENCES users(`id`)
);
Суть: Если добавлять в таблицы moderators_products
и subadmins_products
записи, то возможна ситуация при которой один и тот же id из таблицы users
будет соответствовать одному и тому же id из таблицы products
. То есть, получается, что один юзер у одного и того же продукта будет как субадмином, так и модером. Это нужно исключитью. Есть варинт проверять это программно, но мне интересно есть ли решение средствами DB.
Решение 1: с помощью триггеров на вставку/обновление для таблиц subadmins_products и moderators_products, проверять наличие записи в другой таблице.
Решение 2: subadmins_products и moderators_products объединить в одну users_products, добавить колонку user_type=[субадмин или модер], наложить ограничение UNIQUE KEY на набор колонок product_id
, users_id
CREATE TABLE `users_products` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`product_id` MEDIUMINT UNSIGNED NOT NULL, -- Внешний ключ из product
`users_id` INT UNSIGNED NOT NULL, -- Внешний ключ из user
`user_type` INT NOT NULL, -- субадмин или модер
PRIMARY KEY (`id`),
UNIQUE KEY (`product_id`, `users_id`),
FOREIGN KEY (`users_id`) REFERENCES users(`id`)
);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
API приложения: minSdkVersion 14 targetSdkVersion 25
Есть такая разметка, можно ли без дополнительных оберток сделать это на флексбокс? Что должно получится прикрепляю изображением
Хочу оптимизировать - записать по другому эту часть кода:
Пишу программу на C# по распознаванию речи (MicrosoftSpeech