Я недавно перешел к аналогичной ситуации, рассмотрим схему:
Таблица компании (id_cia PK) Таблица product_group (id_cia FK для компании, id_group PK) Таблица products (id_group FK для product_group, id_product PK, id_used_by_the_client null)
Правило: база данных должна разрешать только один id_used_by_the_client для каждого продукта компании, но это поле может быть нулевым. Пример:
Вставить в компанию (1) = разрешено
Включить в компанию (2) = разрешено
Вставить в группу товаров (1, 1) = разрешено
Вставить в группу товаров (1,2) = разрешено
Вставить в группу товаров (2,3) = разрешено
Вставить в товары значения (1, 1, ноль) = разрешено
Вставить в товары значения (1, 2, ноль) = разрешено
Вставить в товары значения (1, 3, 1) = разрешено
Вставить в товары значения (1, 4, 1) = не разрешено, в группе 1, принадлежащей компании 1, уже существует id_used_by_the_client = 1.
Вставить в товары значения (2, 4, 1) = не разрешено, в группе 2, принадлежащей компании 1, уже существует id_used_by_the_client = 1.
Вставить в товары значения (3, 4, 1) = разрешено, в группе 3, принадлежащей компании 2, нет id_used_by_the_client = 1.
Я решил использовать триггер для контроля этой целостности.