sql - 在字符串中存储数组(数据库专家问题)

标签 sql mysql database database-design

我有一个包含 100000 个产品的产品表,还有一个包含 5000 条记录的用户表。并假设用户可以向我们提供有关此产品的任何组合的反馈。那么假设他选择比较产品 1,3,100,200,400,500 等等。 (他可以向我们发送有关其他一些产品的另一个反馈)

所以这是我的问题,我只想知道一个专业的数据库设计者会怎么想这种产品和用户数量很大的情况。存储此评分的一种方法是使用单个字符串,例如:1#5 3#4 100#5 .... x#y 表示他给 ID 为 x 的产品打了 y 颗星。例如,我可以在我的 php 脚本中加载这个 vote_string 并提取它的详细信息。

因此评级表可能具有以下结构: id, user_id, vote_string

另一种方法是将此反馈存储在该结构中:

投票表:id, user_id, date

vote_details 表:vote_id, product_id, vote ==> (vote_id,products_id) 作为主键,vote_id 为外键。

(或者可以将这两个表压缩到一个表中,例如 id,user_id,product_id,vote [id,user_id,product_id] 作为主键)

所以我想在第二种设计中查询起来更容易,但是每次查询都会消耗更多的空间和时间,而且在产品删除的情况下,使用第二种设计会更好。你会怎么做?

任何类型的想法都适用。

最佳答案

您几乎不想在数据库领域走上连接字符串的道路。只是让查询变得非常痛苦——而且,这并不是数据库设计用于处理数据的方式。

认为您想要第二种方法。您需要考虑主键等问题{即同一个人可以为产品投票两次吗?}

关于sql - 在字符串中存储数组(数据库专家问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1146931/

相关文章:

mysql - 如何合并和计算除 ID 列之外相同的 MySQL 行?

mysql - 希望删除子查询

sql - 使用 CTE 进行递归选择时出现错误 - "UNION operator must have an equal number of expressions"

php - 如何在 Medoo SQL 语句的 WHERE 子句中写入 "AND"和 "OR"

sql - 返回子记录等于特定值的父记录,并且给定父记录的总子记录集等于特定值

MySQL多对多,获取值

php - 请求大量 Twitter API 数据、服务或操作方法?

mysql - 如何使用 Xamarin Forms 连接到 Amazon MySQL 数据库?

c# - 迁移会影响我的数据库吗?

database - Cassandra Db中隔离的理解