拥有200万用户。每个用户都可以订阅3项服务。在这种情况下,想知道哪种结构会更好。
。
发布于 2020-11-20 19:07:43
表结构取决于将要执行的查询类型,即如何选择数据,是否需要索引选择。如果您预期每个邮件列表将至少有10%的用户订阅,那么您可能不会从索引中获得很大的收益,并且您可以只创建一个整数列,当每个邮件列表将有一个自己的位(2^N)时,例如:
SELECT * FROM Subscriptions WHERE (MailingListFlags AND 8) <> 0;代替4 put 2或1取决于您需要的位,其中1=第一位,2=第二位,4=第三位,8=第四位,等等。
这种逻辑和操作将不允许您有效地使用索引。但是,如果您希望逐个选择邮件列表,则只有在结果数量较低时才能从索引中获得好处,例如,在用户总数中不到10%。然后为每个邮件列表创建布尔列。但这种结构不会很灵活。如果需要创建新的邮件列表,则需要添加新列。一种更灵活的方法是为每个用户表示一个整数ID (其他用户数据,如名称和电子邮件将存储在不同的表中)和每个邮件列表。因此,您将只有两个整数列,但用户ID列并不是唯一的,例如,如果用户1订阅列表2和3,用户2订阅列表1、3和4,表将如下所示
User | List
===========
1 | 2
1 | 3
2 | 1
2 | 3
2 | 4发布于 2020-11-20 19:07:12
你应该用两张桌子。一个用于用户,一个用于服务,在服务中有一个引用用户Id的列。
https://stackoverflow.com/questions/64935345
复制相似问题