Мой первый выбор, если значения ItemBarcode
действительно уникальны, будет:
РЕДАКТИРОВАТЬ: Добавлено описание необходимых триггеров.
- Добавьте триггеры для обеспечения уникальности штрих-кода.
(Триггер вставки / обновления в каждой таблице элементов должен проверить, что все (вновь) назначенные штрих-коды не отображаются в других таблицах элементов.)
- Используйте одну таблицу
BoxId
/ ItemBarcode
без отношения FK на стороне штрих-кода, но с триггерами, чтобы гарантировать, что она остается действительной.
(Триггер вставки / обновления в таблице сопоставлений должен проверять наличие штрих-кодов в таблицах элементов. Триггер удаления в каждой таблице элементов должен предотвращать или каскадно удалять элементы, которые находятся в таблице сопоставлений. Триггер обновления включен Таблицы элементов необходимо обновить и изменить штрих-коды в таблице сопоставлений. Последние могут быть интегрированы в триггер вставки / обновления в предыдущем пункте.)
- Рассмотрите возможность использования представления всех элементов для доступа к общим данным
ItemBarcode
.
Мой второй выбор будет n BoxId
/ ItemBarcode
таблиц для типов элементов n . Просто, но немного занят. Это делает добавление нового типа элемента более сложным, чем нужно.
Я бы не использовал таблицу BoxId
/ ItemTypeId
/ ItemBarcode
. Он денормализует данные, снова связывая ItemTypeId
и ItemBarcode
, не позволяет использовать FK на стороне штрих-кода и требует триггеров для обеспечения целостности.
Не бойтесь триггеров. Есть некоторые проблемы, которые они могут решить достаточно эффективно.