Распределение критериев по услугам через многие-ко-многим

Моя задача:
Необходимо разработать БД для Digital компании (сам себе придумал задание), но столкнулся с такой сложностью, что есть разнообразные услуги, у которых есть общие критерии (стоимость, исполнитель, заказчик...) и есть уникальные (ЦА, бюджет, направление...). Преподаватель предложил два варианта решения: через суперсущность и второй вариант через связь многие-ко-многим (где есть сущность Тип услуги, в которой хранится ключ и название типа услуги, сущность Критерии, где такие же атрибуты и третья сущность - Распределение, где хранится ключ, FK тип услуги, FK критерий, и по моему мнению хранится значение критерия).
Я выбрал второй вариант как более правильный и столкнулся с тем, что не понимаю, где хранить значение уникального критерия.

введите сюда описание изображения

Criteria - сущность с критериями
ServiceType - сущность с типом услуги
ServiceCriterion - сущность для связи многие-ко-многим


Ответы (1 шт):

Автор решения: Mikhail Pashkov

На мой взгляд вы всё правильно отобразили в диаграмме. Значение критерия действительно можно хранить в т.н. таблице связи

Диаграмма

Как идея: можно вынести общие поля (стоимость, исполнитель, заказчик) в таблицу service, тогда некоторые запросы будут чуть короче (но это так, в качестве идеи):

вместо:

select s.id, s.desc
from service s -- можно делать select from service_criteria 
               -- и джоинить service и criteria
join service_criteria sc on sc.service_id = s.id
join criteria c on c.id = sc.criteria_id
where c.desc = 'Price'
  and CAST(sc.criteria_val AS decimal) < 120.00

можно будет:

select s.id, s.desc
from service
where s.price < 120.00
→ Ссылка