Это просто, это простая проблема двухуровневой классификации. в вашем приложении вам нужно два отдельных раскрывающихся списка, категория продукта заполняется после выбран тип продукта.
Одно уточнение: Ваше утверждение "Продукт имеет тип продукта и может иметь много категорий продукта" противоречит вашему описанию. Продукт может иметь только одну категорию продукта (художественная литература, джаз), основанную на типе продукта (книга, музыка).
Здесь нет необходимости в суррогатных ключах (могут быть и другие требования к моделированию), они здесь просто избыточны. Для простых классификаций, подобных этой, CHAR (1) или (2) намного лучше, удобен для пользователя и разработчика (когда вы сканируете вывод, вы знаете, что «B» означает «Книга» и т. Д.), А также быстрее, чем любое числовое ключ (кроме, конечно, tinyint).
Здесь нет «хитрости», это прямая нормализация, которая поддерживает определенные вами правила.
Ссылка на классификацию продуктов
Я не понимаю необходимости таблицы "map".
Я предоставил суррогатный ключ для продукта, но, конечно, вам нужны другие ключи для реализации разумных ограничений.
Ответы на комментарии
Хорошо, значит, ваши требования не ясны, и, похоже, они сейчас меняются. Когда вы ответите на мои конкретные вопросы в комментариях, модель, необходимая для поддержки вашего требования, будет легкой. Чтобы помочь, я опубликовал две возможности. Конечно, это не завершено, в ожидании ваших ответов:
Ссылка на две возможные модели
Кажется, что "стесненность" вашего администратора и администратора в отношении пользователей очень слабая. Пожалуйста, выберите один из следующих вариантов, чтобы мы могли продолжить и закрыть вопрос:
Product.ProductType устанавливается администратором. Это позволяет администратору и пользователям выбирать любые допустимые категории продуктов для Product.ProductType для любого использования.
Для каждого продукта администратор выбирает ProductType и подмножество ProductCategories (из списка ProductCategories, которые действительны для Product.ProductType). Пользователи могут , затем использовать только категории продуктов , выбранные администратором для Продукта , для любого использования.
Ответьте пожалуйста, а потом я опубликую окончательную версию.