Я работаю над приложением, которое отслеживает цены на определенные товары.
Каждая цена имеет ссылку на предмет, бизнес, который продает этот предмет, и местоположение, в котором предмет продается.Теперь, как правило, это будет хорошо:
CREATE TABLE `price` (
`priceId` INT UNSIGNED NOT NULL AUTO_INCREMENT, -- PK
`businessId` INT UNSIGNED NOT NULL,
`itemId` INT UNSIGNED NOT NULL,
`locationId` INT UNSIGNED NOT NULL,
`figure` DECIMAL(19,2) UNSIGNED NOT NULL,
-- ...
)
Но у меня есть следующая проблема:
Логика приложения такова, что один элемент в одном предприятии в одном месте может иметь несколько цен(на данный момент не очень важно, почему), и одна из этих цен может быть официальной ценой - предмет не должен иметь официальную цену, но если это так, то может быть только одна.
Вопрос ;Как смоделировать это для обеспечения целостности данных?
Моя первоначальная идея состояла в том, чтобы создать дополнительную таблицу:
CREATE TABLE `official_price` (
`priceId` INT UNSIGNED NOT NULL -- PK + FK (references price.priceId),
-- ...
)
Эта таблица будет содержать priceId: s для официальных цен, а ограничение PK / UNIQUE позаботится о «одно или-none 'ограничение.
Это похоже на работоспособное решение, но мне все еще интересно, есть ли лучший способ справиться с этой ситуацией?