У меня есть обычная схема «один ко многим», подобная этому простому примеру:
PERSON
person_id (PK)
PERSON_TRAIT
person_id (FK)
trait_id (FK)
количество
TRAIT
trait_id (PK)
Имя
// другие атрибуты
С учетом набора признаков («дружелюбный, смешной»), как бы я возвращал связанный набор person_id и количества записей.
На первый взгляд я испытал желание использовать это, но это не так просто:
select person_id, quantity
from trait t
inner join person_trait pt on t.trait_id = pt.trait_id
where name in ('friendly', 'funny')
Это не правильно, потому что у меня мог быть человек, у которого есть эти черты плюс еще ("дружелюбный, смешной, худой"), и он был бы возвращен.
Если сделать еще один шаг вперед, если нет человека, который точно содержит все черты, как бы я суммировал черты от нескольких разных людей и возвратил набор записей этих значений person_id и количества?
Использование SQL Server 2005.