только одно из имеющегося у персонажа в наличии?
А индекс тут (уникальный) может и не поможет. А как— бизнеслогикой, реализованной например триггерами, или процедурами.
Соответственно, с помощью Foreign Key, как в одной из предложенных моделей.
Функция+CHECK на поле. Я вот только не помню, допустимо ли в CHECK использовать функции.
Check работает на уровне строки, это не замена индекса
Там в check ограничение в пределах строки может быть, он вам не поможет
Дополнительным полем в основной таблице бойцов. Логично и просто.
Я это вчера предлагал. Видимо это предложение автору показалось токсичным. 😀
ALTER TABLE fighter ADD COLUMN weapon_id bigint REFERENCES weapon (weapon_id);
Вместо 1 insert в m2m таблицу еще update добавляется.. и как костыль выглядит. Это поле все же к свойству связи относится, нежели к бойцу.
Любят людишки на ровном месте проблем себе найти и усложнить простую задачу. Дополнительным полем в таблице-связке с условием единичности для бойчилы задача усложняется, причём хорошо так. Если не CHECK, то триггер на UPDATE/INSERT/DELETE вешать надо
Какой один инсёрт? У вас у бойца куча вооружений. Он выбирает что-то одно - это апдейт таблицы-связки!
Я так и знал что вы это скажите, но по большому счету можно сделать отдельно 1 к 1 таблицу с сессионным данными бойца где будет это поле в том числе, это уже от задачи зависит
Один апдейт с проверкой (поле в таблице-связке) - это точно дороже одного апдейта в основной таблице.
Я выбираю вариант с меньшей записью в бд и меньшим количеством кода
Хмм... и что, казалось бы? Это же способ назначения активной записи. > и как костыль выглядит. А уж is_active=false в каждой из неактивных записей не выглядит как костыль. ;)
Кода у вас будет ГАРАНТИРОВАННО больше. Причём существенно больше. На стороне БД - триггер, на стороне приклада проверка тоже не помешает.
Нет, один insert или update в одну таблицу
Как вы будете обеспечивать единичность активного оружия, когда у вас их несколько?
Гарантировать бизнес условие чтобы не получило двух активных.
Писал же выше- индекс
Обсуждают сегодня