Вот способ обсудить дизайн таблицы в этих случаях на основе моделирования ролей объектов. (Да, я понимаю, что это только косвенно связано с вопросом.)
У вас есть товары и штрих-коды. Продукты однозначно идентифицируются с помощью кода продукта (например, «A2111»; штрих-коды однозначно идентифицируются по значению (например, 1002155061).
Продукт имеет штрих-код. Вопросы: Может ли продукт не иметь штрих-кода? Может ли один и тот же продукт иметь несколько штрих-кодов? Могут ли несколько продуктов иметь один и тот же штрих-код? (Если у вас есть опыт работы с этикетками UPC, вы знаете, что ответ на все эти вопросы - ИСТИНА.)
Итак, вы можете сделать несколько утверждений:
Продукт (код) имеет ноль или более штрих-кода (значения).
Штрих-код (значение) имеет один или несколько Продуктов (код). - допущение: у нас штрих-коды не существуют независимо, если они не / не были / не будут связаны с продуктами).
Что напрямую (через вашу модель ORM) приводит к схеме с двумя таблицами:
Продукт
ProductCode (PK) Описание и т. Д.
ProductBarcode
ProductCode (FK) BarcodeValue
- с натуральным первичным ключом из двух частей: ProductCode + BarcodeValue
и вы связываете их вместе, как описано в других ответах.
Подобные утверждения можно использовать для определения того, какие поля входят в различные таблицы в вашем дизайне.