Postgresql 存储来自多个商店的产品价格

Postgresql 存储来自多个商店的产品价格,postgresql,database-design,Postgresql,Database Design,我正在开发一个web服务,可以比较多家商店的产品价格 我考虑了以下数据库设计(简化): 没有理想的世界,所以来自不同商店的产品可能会有所不同/例如,产品名称可能拼写不同或包含一些其他字符(例如,IV而不是4)/。这就是为什么我决定使用URL作为定价表主键的原因 价格按产品分组(有一个名称和其他一些属性)。从store API插入产品定价时,会有一个查询,按名称检查数据库中是否存在此类产品(经过一些字符串清理)。如果没有这样的产品,那么正在创建新的产品 我想知道这是不是最好的方法?如果任何商店将更

我正在开发一个web服务,可以比较多家商店的产品价格

我考虑了以下数据库设计(简化):

没有理想的世界,所以来自不同商店的产品可能会有所不同/例如,产品名称可能拼写不同或包含一些其他字符(例如,IV而不是4)/。这就是为什么我决定使用URL作为
定价
表主键的原因

价格按产品分组(有一个名称和其他一些属性)。从store API插入产品定价时,会有一个查询,按名称检查数据库中是否存在此类产品(经过一些字符串清理)。如果没有这样的产品,那么正在创建新的产品

我想知道这是不是最好的方法?如果任何商店将更改其URL结构怎么办?这样的数据库设计是否足够有效

更新 @Gordon Linoff提出了一系列非常好的问题。下面可以找到一些答案和澄清

应用程序中产品的主要属性是什么?肯定是产品名。将产品名称存储为主键的关键问题是,在插入新产品之前,各商店/应用程序中有一个内部服务来修复这些名称的差异

该应用程序的关键功能是识别不同商店中的不同产品。第二个关键特性是产品和多个商店的价格/定价历史之间的联系,这就是为什么URL作为一个主要的关键概念诞生了

用户将如何看待价格?
有趣的问题。将有一个产品列表,其中包含产品名称/和一些其他属性/。在单一视图中,将显示不同商店的价格列表。就这样

另一方面,产品定价将每天更新一次。如果任何URL发生更改,应用程序将尝试根据产品名称插入定价。如果
产品
表/”中有一个数据库行/,应用程序将用新的
定价
项目连接找到的
产品
。因此,如果任何商店更改其URL结构,应用程序应该不会受到影响。我错过什么了吗


也许我应该将URL作为常规属性/列存储在数据库中,而不是将其用作主键/?

这对于注释来说太长了

使用远程控制的URL作为产品的主键似乎是一个非常糟糕的主意。您无法控制URL。而且,这些事情的改变不是一声呜咽,而是一声巨响——突然之间,一个给定站点的所有URL都会改变

你需要改变设计的视角。用户将如何看待价格?他们将如何描述产品?在不同的站点上识别完全相同的产品是否重要?这些是您需要设计的关键属性


您可能需要设计自己的基础结构来识别产品。您可以使用每个供应商的方案(这些方案通常以SKU(库存单位)为单位)。或者,您可能有使用UPCs(通用产品代码)之类的行业标准方法。

谢谢您的回答,Gordon!我已经更新了原始问题以回答您的问题。也许到那时,你会想到一件事:)
Store:
- id PK
- name
- url

Product:
- id PK
- name

ProductPricing:
- productUrl PK
- store
- price
- date
- discount