【发布时间】:2017-07-04 04:56:24
【问题描述】:
我有两个表:tblIssue 和 tblIssueSubscriber 用于我的时事通讯应用程序。
这是我的标准化设计:
tblIssues (newsletter issues masterlist)
--------------------
IssueId int PK
PublisherCode varchar(10)
IssueDesc varchar(50)
tblIssueSubscribers (newsletter subscribers)
-----------------
IssueId int FK
EmailAddress varchar(100)
但是 tblIssueSubscriber 预计每周会保存数十万甚至数百万条记录,并且会经常访问它,这就是我倾向于表分区的原因。我的设计是根据 PublisherCode 对 tblIssueSubscriber 进行分区(我们的主列表中有 8 个 publisherCode)。
tblIssues
--------------
IssueId int PK
PublisherCode varchar(10)
IssueDesc varchar(50)
tblIssueSubscribers
-----------------
IssueId int FK
PublisherCode varchar(10)
EmailAddress varchar(100)
然后根据 PublisherCode 对其进行分区
CREATE PARTITION FUNCTION [PartitionPublisher] (varchar(10)) AS RANGE RIGHT FOR VALUES ('PUBLISHER1', 'PUBLISHER2', 'PUBLISHER3', 'PUBLISHER4', 'PUBLISHER5', 'PUBLISHER6', 'PUBLISHER7', 'PUBLISHER8');
我知道表分区会增加复杂性,所以我的问题是,
是否值得对 tblIssueSubscriber 进行分区,还是我应该坚持 标准化设计?
【问题讨论】:
-
订阅者会收到多个问题吗?如果是这样,您可能希望将订阅者数据标准化为 tblSubscribers 并避免重复电子邮件地址。那么 tblIssueSubscribers 将只是两个表之间的连接表。
-
是的,我们只是通过 Excel 文件下载订阅者(电子邮件)列表(1 个问题 = 1 个 Excel 文件 = 订阅者列表)并将其上传到 db,这样我就无法避免重复添加到数据库中的电子邮件因为我们不维护订阅者的电子邮件地址...
-
@Andrew,你能解释一下为什么他应该在这个问题上正常化,还是只是一个典型的下意识反应,认为 3NF 是上帝?
-
OP 没有提及来自 Excel 等平面源的订阅者数据。如果订阅者和订阅列表由他的应用程序管理,那么对其进行规范化很可能是有意义的。为什么不需要复制数百万个电子邮件地址?保存加入?如果没有可用的订户信息主列表,那么显然规范化不是一种选择。
标签: sql database-design