0

我正在构建一个订阅功能,用户可以根据单个类别(即“书籍”)注册不同的邮件列表。

在 MySQL 中设计我的表时,我遇到了两个选项:

选项1

/* Table 1 */
Books
    Email

/* Table 2 */
Magazines
    Email

每个用户可以订阅多个列表。

选项 2

/* Table 1 */
All Categories
    Email
    Category_ID

/* Table 2 */
Category_ID
    Category

我基本上是从所有电子邮件的主表中交叉引用一个类别 ID。在该表中,电子邮件可能会重复,因为用户可以订阅多个类别。我想我想给每个类别一个 ID,而不是引用数据库中的实际字符串,尽管我在数据库模式设计方面没有经验。

你会去哪个?交叉引用类别 ID 或将每个类别分解到自己的表中是否更快?(假设我通过电子邮件发送一长串列表以在每个类别出现新评论时通知用户)。

4

1 回答 1

0

您的第二个选项是更规范化的形式,因为它不会在多个表中复制数据(电子邮件)。我会更进一步使用您的第二个选项并创建一个用户表(因为您将来无疑需要存储的不仅仅是一封电子邮件)并将用户的 UserID 存储在您的第一个表中,而不是 e -邮件地址。这将确保当用户需要更新他们的电子邮件地址时,您不需要更新多个表(如选项 #1)或单个表中的多个记录(选项 #2)。当您要求查询非常快(无连接)时,非规范化(选项#1)是可以的,但在插入/更新/删除操作方面有很多缺点。在您的情况下,出于上述原因,我会选择修改后的选项 2。

于 2012-07-23T18:20:04.090 回答