Это легко, это простая двухуровневая проблема классификации. в вашем приложении вам нужны два отдельных выпадающих списков, нумерация ProductCategory после выбрана ProductType.
Прояснение: Ваше заявление «Продукт имеет ProductType и может содержать много категорий продуктов» противоречит вашему описанию. Продукт может иметь только одну категорию продуктов (Fiction, Jazz), которая основана на ProductType (Book, Music).
Здесь нет необходимости в суррогатных ключах (возможно, в других требованиях к моделированию), здесь они просто избыточны. Для простых классификаций, подобных этому, CHAR (1) или (2) намного лучше, удобнее для пользователей и разработчиков (при сканировании вывода вы знаете, что «B» означает «Книга» и т. Д.), А также быстрее, чем любые числовые ключ (за исключением, конечно, tinyint).
Здесь нет «трюка», это нормальная нормализация, которая поддерживает установленные вами правила.
Link to Product Classification
Я не понимаю, о необходимости «карту» таблицы.
Я предоставил суррогатный ключ для Продукта, но, конечно, вам нужны другие ключи, чтобы реализовать разумные ограничения.
Ответы Комментарии
Ok, так что ваши требования не ясны, и, кажется, теперь они меняются. Когда вы отвечаете на мои конкретные вопросы в комментариях, модель, необходимая для поддержки вашего требования, будет простой. Чтобы помочь, я опубликовал две возможности. Конечно, это является неполным, в ожидании ваших ответов:
Link to Two Possible Models
«герметичность» вашего контроля повторного администратора против пользователей, кажется, очень свободно. Пожалуйста, выберите один из следующих вариантов, так что мы можем прогрессировать и закрыть вопрос:
Product.ProductType устанавливается администратором. Это позволяет администратору и пользователям выбирать любую из допустимых ProductCategories для Product.ProductType для любого использования, которое у них есть.
Для каждого продукта, администратор выбирает ProductType и подмножество ProductCategories (из списка ProductCategories, которые действительны для Product.ProductType). Пользователи могут , а затем использовать только товарные категории от администратора для Продукта, независимо от его использования.
Ответьте пожалуйста, а затем я опубликую окончательную версию.
@Ninja: неточная ссылка исправлена, ожидая ответа на нерешенные вопросы. – PerformanceDBA