我得我已经有反对意见的碎片问题,希望得到更多的意见。

我的网站具有用户,每个用户具有USER_ID。这些用户可以查看产品,我需要让用户浏览特定产品的唯一实例的轨道。要记录在一个单独的意见表的视图,我目前有两个选择:

方法1:

的view_id(INT,PK)| USER_ID(INT,FK)| PRODUCT_ID(INT,FK)| view_date

...创造了轻松更新与ON重复键中间的两个列的唯一约束。如果同样的观点已经存在,我只是更新view_date。如果不是这样,我写了一个新的行。

方法2:

user_product(VARCHAR20,PK)| view_date

...两个ID合并到在中间隔板的VARCHAR,并且使用主键列,易于更新以在与上述相同的方式对重复KEY。

的结构应容纳约百万独到的见解。任何想法上的选择可能是好还是坏,为什么?大预先感谢。

修改 感谢您的答案,似乎有一个共识。靠在到的同一侧,但只是需要的保证。

有帮助吗?

解决方案

我喜欢第一种选择更好 - 在一般情况下,其良好的保持尽可能多的原子性越好。如果你想查询所有的用户的意见,或者类似的东西,那将是更困难的合并两列到一个后做(你需要使用LIKE用通配符匹配,这将永远是一样快索引单值列)。你也失去了能力,在不同的领域指标。

此外,没有任何理由为什么你不可能有涉及多个列的主要或唯一的关键,所以我看不出有什么优势选项2.要执行你的更新,只需使用REPLACE(的文档),而不是INSERT - 这将让你轻松保持其每只有一排你不变用户/产品组合。

其他提示

我认为第一个选项是您更好的选择。后来下了线,我认为它会使查询不同的事情变得更简单。查询可能会更快,以及因为不会有字符串操作有关。此外,如果需要可以有在多个列的主键。

绝对去的第一个选项。第二个选项将意味着来自地狱的种种疑问,如果您需要报告,寻找特定用户组(让我经常查看产品X和产品的所有用户Ÿ所以我们可以为他们提供一个折扣),同样为寻找特定群体的产品(其产品通常由相同的用户观看,因此,我们可以发动打折促销)

我明白,这是不记得所有的个人意见的要求。不过,我肯定会抓住的次数,他们参观产品 - 这几乎是免费的,你可以保持一个运行总计(插入1,对重复密钥更新VIEW_COUNT = VIEW_COUNT + 1)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top