将用户ID列表保存到mysql表

时间:2009-03-20 10:46:03

标签: mysql arrays

我需要保存查看页面,流式传输歌曲和/或下载的用户ID列表。我对列表的处理是添加并显示它。我真的不需要保存更多信息,我想出了两个解决方案。哪一个更好,或者我错过了更好的解决方案:

  1. KISS解决方案 - 带有主键的1个表,歌曲ID和上面三个交互(查看,下载,流)中每个交互的文本字段,其中将有逗号分隔的用户ID列表。添加它只是一个连接操作。

  2. “最佳实践”解决方案 - 拥有3个表,主键是歌曲ID,用户ID字段是进行交互的。每行都有一个用户ID,我可以添加日期和其他内容。

  3. 让我倾向于选项2的一件事是,检查用户是否已经对某首歌投票可能更容易?


    tl; dr version - 最好使用文本字段将数组保存为逗号分隔值,还是将数组中的每个项目放在单独的表格行中。

2 个答案:

答案 0 :(得分:6)

绝对是第二名:

  • 随着应用程序的增长,您将能够扩展应用程序
  • 它将依赖于编程语言
  • 您将能够更快更清晰地查询
  • 以后编程/调试您的应用程序的其他程序员不会那么痛苦

另外,我将添加一个名为“operations”的新表及其ID,因此如果以后需要,可以添加不同的操作,在每行上存储操作ID而不是字符串(“view”,“download” ,“流”)。

答案 1 :(得分:2)

将每个项目放在一个单独的行中肯定会更好。操作文本字段本身具有性能缺点。但是,如果你想知道用户1234观看/收听了哪些歌曲等等,你必须做类似

的事情。
SELECT * FROM songactions WHERE userlist LIKE '%,1234,%' OR userlist LIKE '1234,%' OR userlist LIKE '%,1234' OR userlist='1234';

这只是可怕的,非常痛苦的。