我正在开发一个跟踪某些商品价格的应用程序。
每个价格都有一个项目的参考,销售该项目的企业,以及该项目的销售地点。现在,通常情况下,这会很好:
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 约束将处理“one-or-none”约束。
这似乎是一个可行的解决方案,但我仍然想知道是否有更好的方法来处理这种情况?