Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 这是在这种特定情况下确保数据完整性的好解决方案吗?_Mysql_Integrity - Fatal编程技术网

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:噢,是的,遗漏了一点。其主要思想是空值不被视为重复。