具有自定义字段的实体

时间:2013-05-20 17:22:16

标签: php mysql database-design doctrine-orm

我正在开发一个应用程序,使用户能够配置网关(如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编码字段来设置自定义字段的值不是更好?有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

我最终使用了问题中提到的类似EVA的结构,它并不复杂,实际上使用像Doctrine这样的ORM实现起来非常容易。

因为数据量不会以高速率增长,所以我没有看到任何性能影响,如果它出现任何问题,我只会将其移动到像MongoDB这样的东西。

现在它正在发挥作用,这才是真正重要的事情。