Это легко, это простая проблема двухуровневой классификации. в вашем приложении вам нужны два отдельных раскрывающихся списка, ProductCategory заполняется после выбора ProductType.
Одно уточнение: ваше утверждение "Продукт имеет ProductType и может иметь множество ProductCategory" противоречит вашему описанию. Продукт может иметь только одну категорию продукта (художественная литература, джаз), основанную на типе продукта (книга, музыка).
Здесь нет необходимости в суррогатных ключах (они могут быть в других требованиях к моделированию), они здесь просто избыточны. Для простых классификаций, подобных этой, CHAR(1) или (2) намного лучше, удобны для пользователя и разработчика (когда вы сканируете вывод, вы знаете, что «B» означает «Книга» и т. д.), а также быстрее, чем любой числовой key (кроме, конечно, tinyint).
Здесь нет «хитрости», это прямая нормализация, которая поддерживает определенные вами правила.
Ссылка на классификацию продуктов
Я не понимаю необходимости таблицы "карта".
Я предоставил суррогатный ключ для продукта, но, конечно, вам нужны другие ключи, чтобы реализовать разумные ограничения.
Ответы на комментарии
Итак, ваши требования не ясны, и, похоже, они сейчас меняются. Когда вы ответите на мои конкретные вопросы в комментариях, модель, необходимая для поддержки вашего требования, будет легкой. Чтобы помочь, я опубликовал две возможности. Конечно, он неполный, в ожидании ваших ответов:
Ссылка на две возможные модели< /а>
«Герметичность» вашего контроля над администратором и пользователями кажется очень слабой. Пожалуйста, выберите один из следующих вариантов, чтобы мы могли продолжить и закрыть вопрос:
Product.ProductType устанавливается администратором. Это позволяет администратору и пользователям выбирать любую из допустимых ProductCategories для Product.ProductType для любого использования, которое у них есть.
Для каждого продукта администратор выбирает ProductType и подмножество ProductCategories (из списка ProductCategories, допустимых для Product.ProductType). Пользователи могут затем использовать только те Категории Продуктов, которые выбраны администратором для Продукта, для любых целей, которые у них есть.
Ответьте пожалуйста, и тогда я опубликую окончательный вариант.
person
PerformanceDBA
schedule
30.10.2010