0

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

  • 产品编号
  • 会员编号
  • 用户位置
  • 用户设备

例如:

链接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 的链接被点击
  • 用户的国家是 DE
  • 使用安卓设备

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

我可能会使用 mod_rewrite 来帮助关注查询,例如:

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

这将用于生成查询,但我不知道我想为数据库设计做什么,因此它很灵活,并且无需手动插入与每个可能组合匹配的链接。

我最初想的是这样的一个表:

  • link_id - Auto_incremented PK
  • 附属ID
  • 国家代码
  • product_id
  • 附属链接

但是要为一个 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 |

明白我为什么犹豫要这样做吗?

它看起来如此低效和复杂。必须有更好的方法来做到这一点,但我现在想不出。

为了使它更复杂,有时我会得到一个“任何国家”的链接,但不包括那些已经有链接的国家。

我会很感激任何帮助。

4

1 回答 1

0

您需要两张不同的表:一张表存储有关每个附属公司的原子数据(id、产品代码、链接),一张用于非原子数据,即国家代码;该表只需要两列,它们共同创建唯一的主键 - 会员 ID + 国家代码。该解决方案将防止不必要的数据重复。

于 2012-10-18T07:22:52.590 回答