Я работаю над заявкой на бронирование сотрудников. У меня есть две разные сущности: Проекты и Пользователи, которым назначено переменное число Навыков.
У меня есть таблица навыков с различными навыками (столбцы: id, name)
Я регистрирую навыки пользователя в таблице под названием UserSkills (с двумя столбцами внешнего ключа: fk_user и fk_skill)
Я зарегистрировал навыки проекта в другой таблице под названием ProjectSkills (с двумя столбцами внешнего ключа: fk_project и fk_skill).
Проект может потребовать, возможно, 6 различных навыков и пользователей при регистрации, а также настроить свои навыки.
Сложнее всего, когда я должен найти пользователей для своих проектов на основе их навыков. Меня интересуют только те пользователи, которые встречаются, которые имеют ВСЕ навыки, необходимые для проекта. Пользователи могут быть более квалифицированными, чем требуется.
Следующий код не будет работать (и даже если бы он работал, это не очень благоприятно для производительности), но он иллюстрирует мою идею:
SELECT * FROM Users u WHERE
( SELECT us.fk_skill FROM UserSkills us WHERE us.fk_user = u.id )
>=
( SELECT ps.fk_skill FROM ProjectSkills ps WHERE ps.fk_project = [some_id] )
Я думаю о создании своей собственной функции, которая принимает две TABLE-переменные, и затем проработке сравнения (вроде модифицированной IN-функции), но я бы скорее нашел решение, более дружественное к производительности.
Я занимаюсь разработкой на SQL Server 2008.
Я действительно ценю любые идеи или предложения по этому вопросу. Спасибо!