DeNormalize 多对多但不想在 SQL 世界中存储冗余数据

发布于 2024-12-09 01:51:04 字数 300 浏览 0 评论 0原文

假设我有新闻通讯,然后是订阅者

每当用户订阅新闻通讯时,我们需要将其存储在表中 - 订阅者列表。

我应该将其存储在新闻通讯表中还是用户表中?即,时事通讯是否应该存储订阅者列表,或者用户是否也应该存储他已订阅的时事通讯列表?这两种情况都将被广泛使用。用户还需要显示他已订阅的新闻通讯,并且新闻通讯需要显示订阅它的用户。

如何设计一个表结构来优化读取?我不想走NoSql路线。

Say I have newsletters and then subscribers:

Whenever a user subscribes to a newsletter we need to store this in a table - the subscribers list.

Should I store this in the newsletter table or in the user table? I.e. should the newsletter store the list of subscribers or should the user store the list of newsletters he has subscribed too? Both the cases will be widely used. User will need to show the newsletters he has subscribed too and newsletters will need to show the users subscribed to it.

How can I design a table structure for optimized for reads? I don’t want to go the NoSql route.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

安人多梦 2024-12-16 01:51:04

您的 UsersSubscribers 表是否相同?如果不是,他们应该是。 Users 表应包含您的用户、Newsletters 表、您的新闻通讯和您的订阅者以及两者之间的关系。

假设您有:

用户

user_id    name
1          a
2          b
3          c

新闻通讯

newsletter_id   name
1               x
2               y
3               z   

订阅者

user_id   newsletter_id
1         1
1         2
2         2

用户 a 订阅了 x 和 y,用户 b 订阅了 y。您还应该在订阅者表的 user_idnewsletter_id 之后添加索引,并且 PK 应为 (user_id,newsletter_id)

Are your Users and Subscribers tables the same? If not they should be. The Users table should contain your users, the Newsletters table, your newsletters and your Subscribers the relation between the two.

Say you have:

Users

user_id    name
1          a
2          b
3          c

Newsletters

newsletter_id   name
1               x
2               y
3               z   

Subscribers

user_id   newsletter_id
1         1
1         2
2         2

User a is subscribed to x and y, user b is subscribed to y. You should also add indexing after user_id and newsletter_id to the Subscribers table and the PK should be (user_id,newsletter_id).

静谧 2024-12-16 01:51:04

这就是多对多表的用途。您将两者之间的关系存储在单独的表中。例子:

newsletter
 id,
 name,
 etc.

subscriber
  id,
  last, 
  first,
  etc.

newsletter_subscriber
  id,
  subscriber_id,
  newsletter_id,
  other attributes, etc.

This is what many-to-many tables are for. You store the relationship between the two in a separate table. Example:

newsletter
 id,
 name,
 etc.

subscriber
  id,
  last, 
  first,
  etc.

newsletter_subscriber
  id,
  subscriber_id,
  newsletter_id,
  other attributes, etc.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文