说我有newsletters
然后subscribers
:
每当用户subscribes
收到时事通讯时,我们需要将其存储在一个表中 - 订阅者列表。
我应该将它存储在newsletter table
还是user table
?即时事通讯应该存储订阅者列表还是用户也应该存储他订阅的时事通讯列表?这两种情况都将被广泛使用。用户也需要显示他订阅的时事通讯,并且时事通讯需要显示订阅它的用户。
如何设计一个表结构以优化读取?我不想走NoSql 路线。
说我有newsletters
然后subscribers
:
每当用户subscribes
收到时事通讯时,我们需要将其存储在一个表中 - 订阅者列表。
我应该将它存储在newsletter table
还是user table
?即时事通讯应该存储订阅者列表还是用户也应该存储他订阅的时事通讯列表?这两种情况都将被广泛使用。用户也需要显示他订阅的时事通讯,并且时事通讯需要显示订阅它的用户。
如何设计一个表结构以优化读取?我不想走NoSql 路线。
你的Users
和Subscribers
桌子一样吗?如果不是,他们应该是。该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_id
PK 应该是(user_id,newsletter_id)
.
这就是多对多表的用途。您将两者之间的关系存储在单独的表中。例子:
newsletter
id,
name,
etc.
subscriber
id,
last,
first,
etc.
newsletter_subscriber
id,
subscriber_id,
newsletter_id,
other attributes, etc.