2013-05-20 3 views
0

사용자가 특정 캠페인을 처리하도록 게이트웨이 (PayPal, Authorize.net 등)를 구성 할 수있는 기능을 제공하는 응용 프로그램을 개발 중이지만 각 게이트웨이에는 각각 다른 필드가 있습니다. 다른.사용자 정의 필드가있는 엔터티

필드 값은 특정 캠페인과 함께 사용되는 사용자 지정 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 구문은 표준 직렬화 형식으로 데이터를 인코딩하는 것보다 실제 이점을 제공하지 않으면 서 문제에 상당한 복잡성을 초래합니다. 나는 그 SOB를 json_encode하고 그것을 하루로 부를 것이다. – Orangepill

답변

0

질문에 언급 된 EVA와 같은 구조를 사용하여 끝났습니다. 복잡한 것은 아니 었습니다. 사실 Doctrine과 같은 ORM을 사용하여 구현하기가 정말 쉽습니다.

데이터 속도가 너무 빠르기 때문에 성능에 영향을주지 않으며 문제가 발생하면 MongoDB와 같은 것으로 이동합니다.

지금은 제대로 작동하고 있으며 처음에는 정말 중요합니다.

관련 문제