1

说我有newsletters然后subscribers

每当用户subscribes收到时事通讯时,我们需要将其存储在一个表中 - 订阅者列表。

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

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

4

2 回答 2

4

你的UsersSubscribers桌子一样吗?如果不是,他们应该是。该Users表应包含您的用户、该Newsletters表、您的时事通讯以及您Subscribers两者之间的关系。

假设你有:

用户

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。您还应该在 Subscribers 表之后user_id和之后添加索引,并且newsletter_idPK 应该是(user_id,newsletter_id).

于 2011-10-09T14:19:25.077 回答
2

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

newsletter
 id,
 name,
 etc.

subscriber
  id,
  last, 
  first,
  etc.

newsletter_subscriber
  id,
  subscriber_id,
  newsletter_id,
  other attributes, etc.
于 2011-10-09T14:19:00.207 回答