我需要保存查看页面,流式传输歌曲和/或下载的用户ID列表。我对列表的处理是添加并显示它。我真的不需要保存更多信息,我想出了两个解决方案。哪一个更好,或者我错过了更好的解决方案:
KISS解决方案 - 带有主键的1个表,歌曲ID和上面三个交互(查看,下载,流)中每个交互的文本字段,其中将有逗号分隔的用户ID列表。添加它只是一个连接操作。
“最佳实践”解决方案 - 拥有3个表,主键是歌曲ID,用户ID字段是进行交互的。每行都有一个用户ID,我可以添加日期和其他内容。
让我倾向于选项2的一件事是,检查用户是否已经对某首歌投票可能更容易?
tl; dr version - 最好使用文本字段将数组保存为逗号分隔值,还是将数组中的每个项目放在单独的表格行中。
答案 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';
这只是可怕的,非常痛苦的。