使用由商店ID和商品ID组成的复合主键 - 它将为每个商店提供每个商品的唯一主键,并且您不需要单独的字段(假设商店标识和商品标识已在表格中)。
理想情况下,你应该有3个表...类似:
article
--------------------------------------------
id | isbn | ... etc ...
store
--------------------------------------------
id | description | ... etc ...
pricelist
--------------------------------------------
article_id | store_id | price | ... etc ...
随着PRIMARY KEY
为pricelist
量由article_id
和store_id
复合键。
编辑:(更新,其中包含从注释的答案)
即使在一百万行的UPDATE
应该是确定(OK的有一定的定义,它可能仍然需要一段时间与因为article_id
和store_id
包括PRIMARY KEY
-它们将两者被索引。
你只需要编写你的查询,以便它沿着线是:
UPDATE pricelist SET price = {$fNewPrice}
WHERE article_id = {$iArticleId}
AND store_id =` '{$sStoreId}'
虽然你可能要考虑在store
表(store.id
转换PRIMARY KEY
- 因此在还pricelist.store_id
pricelist
表)到无符号INT或类似CHAR(30)。
虽然VARCHAR是更有效的,当谈到磁盘空间,它有两个缺点:
1:MySQL是不是太热衷于更新VARCHAR值,它可以使索引臃肿了一点,所以您可能需要偶尔运行OPTIMIZE TABLE
(我在order_header表之前发现此问题)。
2:与非固定长度字段(如VARCHAR)任何(MyISAM的)表将必须有一个DYNAMIC行格式这是稍微低效率的,当涉及到查询它 - 有关于更多信息在此SO帖子上:MySQL Row Format: Difference between fixed and dynamic?
你可以发表你的表的结构吗? –
听起来像你需要重组你的表。您应该每个项目只有一行。如果它有多个价格,这些将反映在一个单独的表格中,这可能是物品和商店之间的多对多。 – John
@DaveRix我编辑了我的Q. – Joseph