2013-05-20 55 views
0

我正在开发一个应用程序,使用户能够配置一个网关(如PayPal,Authorize.net等)来处理特定的活动,但是,每个网关都有特定的字段,另一个。实体与自定义字段

在创建与特定Campaign一起使用的自定义GatewayConfiguration期间,字段的值是用户可以更改的唯一值。

read about it,发现这样做的一个好方法是有一个表的字段,另一个为这些字段的值。事情是这样的:

 
------------ 
-- Gateway Table 
------------ 
id 
1 

-------- 
-- GatewayField Table 
-------- 
id, gatewayId, name,  label 
1, 1,   'username', 'Gateway Username' 
2, 1,   'password', 'Gateway Password' 
3, 1,   'apiurl', 'Gateway Api URL' 

----------- 
-- GatewayConfiguration Table 
---------- 
id, gatewayId 
1, 1 

------- 
-- GatewayFieldValue Table 
------- 
gatewayConfigurationId, fieldId, value 
1,      1,  'someUser' 
1,      2,  'somePass' 
1,      3,  'someUrl' 

有没有太多的网关,它不会改变太多,因为用户不能添加新的网关,只需使用现有的,正因为如此,该GatewayField不也会改变。

这样做并不复杂吗?把所有的网关放在一张表上,例如使用JSON字段来定义这个网关接受哪些自定义字段,并且在GatewayConfiguration上只使用另一个JSON编码字段来设置自定义字段的值,不是更好吗? ?有更好的解决方案?

+0

上面描述的EAV构造引入了相当复杂的问题,而没有提供任何以标准序列化格式对数据进行编码的实际好处。我会json_encode SOB并称之为一天。 – Orangepill

回答

0

我已经结束了使用问题中提到的类似于EVA的结构,它并不那么复杂,实际上它很容易用像Doctrine这样的ORM来实现。

由于数据量不会以高速增长,所以我没有看到任何性能影响,如果出现任何问题,我只会将其移至MongoDB之类的东西。

现在它正在工作,这是一开始真正重要的。