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

时间:2009-07-18 07:26:52

标签: sql mysql database database-design

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

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

所以评级表可能会有这样的结构: id,user_id,vote_string

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

投票表: id,user_id,日期

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

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

所以我想在第二个设计中查询会更容易,但是每个查询都会占用更多的空间和时间,在产品删除的情况下,使用第二个设计会更好。你会做什么?

任何一种想法都是适用的。

3 个答案:

答案 0 :(得分:6)

你几乎从不想在数据库领域中连接字符串。只是让生活真的很痛苦地进行查询 - 而且,实际上并不是数据库设计用于处理数据的方式。

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

答案 1 :(得分:2)

通过将其存储为字符串,例如1#5 3#4 100#5,您将更难以创建报告。每次需要使用数据时,您还必须进行一些字符串操作。对于像这样的简单结构,我没有看到好处。

我会选择一张桌子(id,userid,productid,vote),但我确信两张也很好。

答案 2 :(得分:2)

伊赫桑

通过连接,您刚刚杀死了数据库强制完整性或使用索引有效搜索用户是否已投票选择特定产品的任何能力。