数据库模式:多个表与id查找

时间:2012-07-23 18:09:38

标签: database-design

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

在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或将每个类别分解为自己的表是否更快? (假设我通过电子邮件发送一个长列表,以便在每个类别发布新评论时通知用户)。

1 个答案:

答案 0 :(得分:0)

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