我正在开发一个跟踪某些商品价格的应用程序。
每个价格都有一个参考商品,一个销售该商品的商家以及该商品的销售地点。现在,通常,这样做会很好:
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约束将处理'一个或所有'约束。
这似乎是一个可行的解决方案,但我仍然想知道是否有更好的方法来处理这种情况?
答案 0 :(得分:0)
你可以使用这个肮脏的黑客:
is_official
添加到price
表,null,因为其中可以包含值priceId + is_official
1
为is_official
null
答案 1 :(得分:0)
您可以使price
表仅保留官方价格(数字可能为空),对(businessId
,itemId
,locationId
)设置唯一约束,并添加另一个引用priceId
的辅助价格表。