Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 为动态附属链接设计数据库_Database_Database Design - Fatal编程技术网

Database 为动态附属链接设计数据库

Database 为动态附属链接设计数据库,database,database-design,Database,Database Design,我在规划阶段建立一个网站,依赖于附属链接。我很难想出一个好的设计,因为附属链接根据不同的标准变化: 产品ID 附属机构ID 用户位置 用户设备 例如: 该链接适用于以下标准: 点击产品10的链接 用户所在国家为美国、英国、加利福尼亚或非盟 他们使用的是安卓设备 为了 点击产品10的链接 用户所在国家为美国、英国、加利福尼亚或非盟 使用iOS设备 为了 点击产品10的链接 用户所在国家/地区为DE 使用Android设备 基本上,如果这些因素中的任何一个发生变化,都可能有特定的联系

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

  • 产品ID
  • 附属机构ID
  • 用户位置
  • 用户设备
例如:

该链接适用于以下标准:

  • 点击产品10的链接
  • 用户所在国家为美国、英国、加利福尼亚或非盟
  • 他们使用的是安卓设备
为了

  • 点击产品10的链接
  • 用户所在国家为美国、英国、加利福尼亚或非盟
  • 使用iOS设备
为了

  • 点击产品10的链接
  • 用户所在国家/地区为DE
  • 使用Android设备
基本上,如果这些因素中的任何一个发生变化,都可能有特定的联系。这是不一致的

我可能会使用mod_rewrite来帮助关注以下查询:

这将用于生成查询,但我不知道我要为数据库设计做什么,因此它非常灵活,并且不必手动插入匹配所有可能组合的链接

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

  • 链接id-自动递增主键
  • 附属机构id
  • 国家代码
  • 产品标识
  • 附属链接
但要仅针对一个产品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 |
明白我为什么不这么做了吗

它看起来是如此低效和复杂。一定有更好的办法,但我现在想不起来

更复杂的是,有时我会得到“任何国家”的链接,但不包括那些已经有链接的国家


非常感谢您的帮助。

您需要两个不同的表:一个表存储每个分支机构的原子数据(id、产品代码、链接),另一个表存储非原子数据,即国家代码;此表只需要两列,它们一起创建唯一的主键-附属机构id+国家代码。此解决方案将防止不必要的数据重复。

首先,我认为您可以将附属机构id、国家代码、设备、产品id设置为外键。