Mysql 这是在这种特定情况下确保数据完整性的好解决方案吗?
我正在开发一个跟踪某些商品价格的应用程序 每个价格都有一个项目的参考,一个销售该项目的企业,以及该项目的销售地点。现在,通常情况下,这会很好:Mysql 这是在这种特定情况下确保数据完整性的好解决方案吗?,mysql,integrity,Mysql,Integrity,我正在开发一个跟踪某些商品价格的应用程序 每个价格都有一个项目的参考,一个销售该项目的企业,以及该项目的销售地点。现在,通常情况下,这会很好: CREATE TABLE `price` ( `priceId` INT UNSIGNED NOT NULL AUTO_INCREMENT, -- PK `businessId` INT UNSIGNED NOT NULL, `itemId` INT UNSIGNED NOT NULL, `locationId` INT UNSIGNED
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约束将处理“一个或无”约束
这似乎是一个可行的解决方案,但我仍然想知道是否有更好的方法来处理这种情况?您可以使用这个肮脏的黑客: 将字段添加到价格表中,可以为空,因为该字段中的值可能为空 创建一个唯一的复合索引priceId+是官方的 对于官方价格,1是官方的 对于非官方,将其保留为空
<>你可以让价格表只保留官方价格,这个数字可能是空的,对商务、IITID、LooSID给出一个独特的约束,并添加一个参考价格的辅助价格表。谢谢,我也考虑过这个问题。priceId+is_official不起作用,因为一个项目可以有多个价格,但这种方法可以应用于businessId+itemId+locationId+is_official的唯一复合索引。@Martin:噢,是的,遗漏了一点。其主要思想是空值不被视为重复。