【问题标题】:Tagging system and score system标记系统和评分系统
【发布时间】:2012-12-19 03:08:25
【问题描述】:

我想跟踪关键字并在我的数据库中为每个用户建立一个评分系统。

我将有一个user 表和他们的website 表。

用户表将包含基本的用户 ID、电子邮件、密码等 website 表将包含 id、user_id、keywords 和 score。

所以我会将他们所有的关键字(最多 5 个关键字)保存在一个实施 MySQLicious 标记解决方案的网站表中。

我的问题是,我会不断更新分数,所以我应该在网站表中保留“分数”字段还是创建一个全新的表并根据网站的 id 字段链接所有分数?

编辑:我也应该将关键字放在同一个表中还是分开它们?

【问题讨论】:

  • 分数与什么有关,用户或他们的网站?
  • 为什么不为关键字创建另一个表:keyword{id, website_id, keyword}?然后,您不必将关键字限制在任何数量。另外,请不要将实际密码存储在用户表中。至于分数,您认为将分数保存在单独的表格中有什么好处?
  • @MPelletier:与他们的网站相关
  • @Marvo:(密码当然会被加密) 数据库设计:这是一个 mysqlicious 解决方案(我不在乎将它们限制为 255 个字符)与您提出的是 Scuttle 解决方案。两者都有优点和缺点tagging.pui.ch/post/37027745720/tags-database-schemas 我只是想知道我是否应该将分数保留在同一张表中或将其分成自己的 score{id, website_id, score} 表。
  • @CodeCrack 仅供参考,密码根本不应该存储在数据库中,无论是否加密。你应该只存储salted password hash,如果你真的很偏执,put the security into a separate tier

标签: mysql database database-design database-schema tagging


【解决方案1】:

如果您只有一个分数,最好将其添加到网站表中。在大多数情况下,制作单独的表格会使事情复杂化,而优势却很小。但是,在某些情况下,您可能需要制作单独的表格:

  • 您有很多网站,但只有其中一些网站有分数。您无需为大多数网站存储 NULL 分数,而是添加一个单独的表,该表仅存储拥有它们的网站的分数。
  • 网站和分数没有一对一的关系,或者该关系本身具有属性(在您的场景中不太可能)。
  • 您已经有很多网站,现在正在添加评分功能。您可能不想更改数据库架构,因为在部署新版本的应用程序时这需要很长时间。您无需更改可能需要很长时间的网站表格,而是添加一个新表格。

【讨论】:

  • 好吧,这是有道理的,但数据库不会变慢,因为我们也在上面运行 LIKE '%on%' 命令来标记和更新/更改分数。?
  • 如果我有 100 万用户和网站怎么办。每次更新网站分数和每次搜索都会点击该表。你如何扩展它?
  • 首先,使用行级锁定而不是表级锁定。其次,如果您通过主键查找网站或评分,无论您的表中有多少行,这都非常快。如果您通过其他列查找网站,请为其添加索引。
【解决方案2】:

只需将分数保持在同一张表中即可。如果将其保存在单独的表中,则没有任何好处。如果你想更新,你可以直接用新的分数更新表,如果你分开这些表没有其他好处,除了一些外键的负担。

【讨论】:

  • 如果我有 100 万用户和网站怎么办。每次更新网站分数和每次搜索都会点击该表。你如何扩展它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-24
  • 1970-01-01
  • 2011-03-15
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
相关资源
最近更新 更多