如果我想与订阅者建立数据库(想想YouTube),我的想法是让一个表包含用户信息,例如用户ID,电子邮件等。然后另一个表(subscriptIon表)包含2列:一个用于用户ID和一个新订户的用户ID。
因此,如果我的用户ID为101且用户312订阅了我,我的订阅表将使用第1列中包含101和第2列中包含312的新行进行更新。
我的问题是每次101获得一个新订阅者时,它会将他们的id添加到订阅表中,这意味着我无法为订阅表设置主键,因为每个用户ID可以多次出现他们的订户和主键需要一个独特的价值。
同样,如果有很多订阅正在进行,搜索101的所有关注者都不会很慢,因为每次101都在第一次搜索时必须搜索并检查所有行列并检查第二列中的用户ID(订户为101)?
我的问题是否有更优化的解决方案?
谢谢!
答案 0 :(得分:1)
在您的情况下,对(user_id, subscriber_id)
是唯一的(用户不能为另一个用户订阅两个,可以吗?)。因此,如果您需要,请创建一个由compound primary key组成的字段。
关于查询订阅表的速度:考虑您在桌面上运行的查询,并添加适当的indexes。一个常见的操作可能是"给我一个我所有订阅者的列表" ,这将转换为类似
的内容SELECT subscriber_id FROM subscriptions WHERE user_id = 123;
(可能作为加入的一部分)。如果您已将user_id
列编入索引,则可以非常有效地运行此查询。
答案 1 :(得分:0)
主键可以由两列组成,subscribe
和subscriber
。而且由于搜索只会是整数值,(没有文本搜索)它会很快。