2012-12-06 80 views
0

我正在构建一个类似于aweber的列表管理系统(用于电话号码,而不是电子邮件)。动态创建MySQL表可以吗?

有一些活动。电话号码与每个广告系列相关联。用户可以向其发送一个号码,然后他们将被订阅。

我正在构建“创建新广告系列”页面。

  1. 我目前的策略是为每个广告系列(campaign_1,campaign_2,...,campaign_n)创建一个单独的表格并将订阅者数据存储在其中。

  2. 也可以创建一个表并向其添加campaign_id列。

每个广告系列应该有5k到25k个用户。

哪一个更好? #1或#2?

+3

选项2;它将使查询多个广告系列变得更容易,维护更容易(无需创建表格,每次生成CRUD语句),并且实际上,您正在预先优化。这不是那么多的数据!如果用户订阅多个广告系列,它也会让您更轻松。 – dash

+2

绝对是第二个。选择一个可能会导致数万年后使用万用表 - 这将是完全无法维护的,并且可能会看到您的数据库架构的心脏病发作(我肯定会这样做)...另外,这是反对正常化,考虑到活动可能包含相同的电话号码 - 因此是数据。 – shadyyx

+0

实际上,你的设计可能看起来像这样:''Campaign','User','UserCampaign','User'和'UserCampaign'是大表,但'UserCampaign'实际上只是一个链接表('UserId','CampaignId'),也许还有一个链接到'CampaignPreferences'。这不是很多数据。 – dash

回答

1

我想这实际上取决于您将拥有的广告系列数量。让我们给你一些优点/缺点:

优点为campaign_n:

  • 更快的查询
  • 你可以在每个实例有它自己的代码和自己的数据库

缺点为campaign_n运行:

  • 数据库修改更困难(您需要同步所有表)
  • 你得到了很多表

的个人而言,我会去选择2(CAMPAIGN_ID场),除非你有一个非常好的理由不这样做。

2

选项2更有意义且被广泛使用的方法。