2012-12-07 40 views
1

我有一个问题,如何在MySQL中存储一些数据。 我有一个网站,当链接被按下时,将一些数据传递给读取这个数据的php文件,并在数据库(mysql)中读写。我正在传递campaign_id和未知数量的参数。Mysql动态列与PHP

http://domain.com/somefile.php?campaignid=1&parameter1=sometext1&parameter2=sometext2&parameter3=sometext3,....etc.. 

我不知道实际的参数数量,因为用户在某种类型的cms中生成它们。我面临的问题是如何将它们存储在数据库中。我在想,使它象下面这样,但我不知道这是否是正确的和最有效的方法:

Combinations Table 
-combination_id (Primary key and auto increment) 
-campaign_id 
-parameter1 
-parameter2 
-parameter3 
-parameter4 
-parameter5 
-parameter6 
-parameter7 
-parameter8 
-parameter9 
-parameter10 

在这个例子中,我假设用户将不添加/使用超过10个参数(其我认为是蹩脚的,但我不能得到更好的解决方案)

此外,如果我使用这种设计,我假设我需要检查在这个文件中,从传递和写入数据库,如果每个参数存在(如果它通过了)。

回答

2

你必须规范你的模式。

假设下表:

Entity: id, campaign_id, other fields. 
Parameter: id, entityId, parameterValue. 

这是一个多到一的关系。

+0

从技术上讲,我同意,如果我要使用数据库纯粹视图,那是这样做的。但这取决于如何使用数据 - 使用非规范化模式的规范化模式可能会让一些用例变得更加困难。 – MortenSickel

0

你可以尝试这样的事:

  • COMBINATION_ID(主键自动递增)
  • CAMPAIGN_ID(索引/外键/不能是唯一的!)
  • PARAM_NAME
  • param_value

您必须为每个参数创建一个条目,但理论上您可以添加一个参数特斯或更多。

可能不是最快的方法,但可能有点难以处理。

1

关于将所有参数作为json存储在一个表行中?

0

我认为这是nosql数据库所做的数据类型...至少,试图强制它进入一个sql数据库总是以某种kludge结尾。 (在那里做吧...)

据我所看到的,你必须将它存储的三种不同的方式:

  1. 正如你建议。可能是处理它的最简单的方法,也可能是最有效的。但是,目前你得到11个参数是因为你遇到的主要问题...
  2. 制作一个参数表 - parameter_id, - campaign_id参数(可能的参数名称,如果它很重要) - 这给你总的灵活性 - 但是其他一切,除了搜索单个值会变得更加困难,
  3. 组合参数并将它们全部存储在文本或varchar字段中。除了搜索单个参数值之外,这可能比1更有效。

    如果我可以补充

  4. 使用一个数组型数据库系统,如PostgreSQL的

0

如果你不知道的参数的实际数会通过URL,有是存储campaign_id的无限数量值的最佳选项。

为此您可以在表格中创建多行。像,

insert into table_name values(<campaign_id>,<parameter1>,<sometext>) 
insert into table_name values(<campaign_id>,<parameter2>,<sometext>) 
insert into table_name values(<campaign_id>,<parameter3>,<sometext>) 
insert into table_name values(<campaign_id>,<parameter4>,<sometext>) 

假设CAMPAIGN_ID在URL独一无二的。