为动态联盟链接设计数据库

时间:2012-10-17 23:52:43

标签: database database-design

我正处于构建依赖联盟链接的网站的规划阶段。我很难想出一个好的设计,因为会员链接根据不同的标准而变化:

  • 产品ID
  • 会员ID
  • 用户位置
  • 用户设备

例如:

链接http://site.com/affiliate/11111/id/10000符合以下条件:

  • 点击了产品10的链接
  • 用户所在国家/地区为美国,英国,加州或澳大利亚
  • 他们正在使用Android设备

http://site.com/affiliate/11111/id/10001

  • 点击了产品10的链接
  • 用户所在国家/地区为美国,英国,加州或澳大利亚
  • 使用iOS设备

http://site.com/affiliate/11111/id/10002

  • 点击了产品10的链接
  • 用户所在的国家/地区为
  • 使用Android设备

基本上,如果这些因素中的任何一个发生变化,它可能会有一个特定的链接。这不一致。

我可能会使用mod_rewrite来帮助专注于查询:

http://mysite.com/outgoing/product-name/11111/android/us

这将用于生成查询,但我不知道我想对数据库设计做什么,因此它非常灵活,可以防止必须手动插入符合所有可能组合的链接。

我最初想的是这样一张桌子:

  • link_id - Auto_incremented PK
  • affiliate_id
  • COUNTRY_CODE
  • PRODUCT_ID
  • affiliate_link

但要为上述第一个例子只做一个product_id:

| link_id | affiliate_id | country_code |   device     | product_id |            affiliate_link                 |
+---------+--------------+--------------+--------------+--------------------------------------------------------+
|    1    |    11111     |      US      |   android    |     10     |  http://site.com/affiliate/11111/id/10000 |
+---------+--------------+--------------+--------------+--------------------------------------------------------+
|    2    |    11111     |      UK      |   android    |     10     |  http://site.com/affiliate/11111/id/10000 |
+---------+--------------+--------------+--------------+--------------------------------------------------------+
|    3    |    11111     |      CA      |   android    |     10     |  http://site.com/affiliate/11111/id/10000 |
+---------+--------------+--------------+--------------+--------------------------------------------------------+
|    4    |    11111     |      AU      |   android    |     10     |  http://site.com/affiliate/11111/id/10000 |
+---------+--------------+--------------+--------------+--------------------------------------------------------+
|    5    |    11111     |      US      |     iOS      |     10     |  http://site.com/affiliate/11111/id/10001 |
+---------+--------------+--------------+--------------+--------------------------------------------------------+
|    6    |    11111     |      UK      |     iOS      |     10     |  http://site.com/affiliate/11111/id/10001 |
+---------+--------------+--------------+--------------+--------------------------------------------------------+
|    7    |    11111     |      CA      |     iOS      |     10     |  http://site.com/affiliate/11111/id/10001 |
+---------+--------------+--------------+--------------+--------------------------------------------------------+
|    8    |    11111     |      AU      |     iOS      |     10     |  http://site.com/affiliate/11111/id/10001 |
+---------+--------------+--------------+--------------+--------------------------------------------------------+
|    9    |    11111     |      DE      |   android    |     10     |  http://site.com/affiliate/11111/id/10002 |
+---------+--------------+--------------+--------------+--------------------------------------------------------+
|    10   |    11111     |      DE      |     iOS      |     10     |  http://site.com/affiliate/11111/id/10003 |

看看为什么我这样做犹豫不决?

它似乎效率低下且复杂。必须有一个更好的方法来做到这一点,但我现在无法想到它。

为了使其更复杂,有时我会获得“任何国家/地区”的链接,但不包括已有链接的链接。

我很感激任何帮助。

1 个答案:

答案 0 :(得分:0)

您需要两个不同的表:一个表存储关于每个会员的原子数据(id,产品代码,链接),一个表存储非原子数据,国家代码;此表只需要两列,它们一起创建唯一的主键 - 联盟ID +国家/地区代码。该解决方案可以防止不必要的重复数据。