рассмотреть следующий ERD для базы данных MySQL:Как ограничить определенные значения в столбце 2 тем же значением в столбце 1 в SQL?
роли таблица содержит все виды (сайт-специфические) ролей пользователей, которые вошли в систему может иметь. Как вы можете видеть из ERD: члены могут иметь несколько ролей, а роли могут иметь несколько членов, назначенных им.
Элементы таблицы динамичны, новые члены с настраиваемыми ролями могут быть сделаны в любое время, но таблица ролей - нет. Текущая настройка ролей является окончательной.
Записи внутри роли таблицы выглядят следующим образом:
id rolename 1 captain 2 cabin boy 3 buccaneer 4 parrot caretaker 5 cook
Теперь проблема: Я хочу, чтобы члены иметь определенные роли, назначенные для них, но некоторые комбинации ролей не могут быть выбраны. Например, капитан также не может быть мальчиком в кабине, но он также может быть смотрителем-попугаем. Повар может также быть мальчиком в каюте, но не смотрителем-попугаем.
Я провел некоторое исследование по Google в отношении этой темы, но, похоже, мне не удалось найти правильные ключевые слова, чтобы найти полезную информацию для решения этой проблемы. Кажется, что все, что я нашел, - это ссылки и руководства о том, как работает SQL CHECK, но не так глубоко.
Есть ли способ использовать ограничения MySQL для ограничения некоторых комбинаций? Если нет, можно ли решить эту проблему с помощью триггеров или функций? Я вообще ищу наиболее эффективное решение этого, это не обязательно должно быть на стороне базы данных.
Это слишком широкое, чтобы ответить окончательно. Это зависит от того, сколько комбинаций допустимо, сколько комбинаций недопустимо и является ли (или оба) этих списков конечными. – Strawberry
Я обновил свой вопрос с дополнительной информацией. Таблица правил конечна. В «реальной» базе данных имеется 9 комбинаций, которые не допустимы, из таблицы ролей с 13 записями (поэтому 9 из 169 комбинаций не допускаются). Если конкретные ограничения важны для того, чтобы знать, что я их положу. –
Нет. Я думаю, что решение Арта находится вдоль правильных линий. Но, похоже, вам не нужен белый список, только черный список, который, как я полагаю, сохранит комбинации, используя абстрактную концепцию «comb_id» и член компонента этой запрещенной комбинации. Может быть, кто-то будет достаточно любезен, чтобы показать вам, как запросить это, поскольку это не совсем очевидно - или, может быть, я ... но солнце просто вышло ... – Strawberry