문제

나는 제공 한 것과 유사한 맞춤 양식 빌더를 구현하려고합니다. 우푸 그리고 Google.

이러한 사용자 정의 양식을 만들기 위해 간단한 UI를 만들었지 만 내 문제는 데이터베이스 디자인에 있습니다. 양식을 작성하면 JSON 구현이 데이터베이스에 저장되고 (이를 개선하고 싶습니다), 사용자가 볼 수있는 양식을 작성하도록 참조했습니다.

제출되면 양식의 모든 필드를 데이터베이스에 저장하고 싶습니다. 데이터베이스 설계에 사용되는 JSON 구조에 따라 쉽게 이루어집니다. 하지만 각 개별 필드를 검색 할 수 있기를 바랍니다.

질문 :

  1. 양식 디자인을 저장하는 더 좋은 방법이 있습니까?
  2. 어떤 데이터 구조/모델이 양식의 결과를 저장할 수 있습니까? 나는 EAV가 가능성이있을 수 있다는 것을 알았지 만, 관련된 입력 유형 (드롭 다운, 확인란, 텍스트, 텍스트)으로 인해 지루할 수 있습니다.
  3. 어떤 구조가 가장 쉬운 검색을 허용하고 어디에서 조항을 사용할 수 있습니까? 주어진 json 예제, 내가 이것을 잘 할 수 없어
도움이 되었습니까?

해결책

EAV는 유효한 옵션입니다. 효과적으로 미지의 데이터가되는 것이 복잡하고 어색 할 수 있습니다.

XPath가있는 XML도 옵션입니다. http://dev.mysql.com/tech-resources/articles/xml-in-mysql5.1-6.0.html

검색 할 필드가 다를 수 있다면 대부분의 경우 동적 SQL을 생성해야한다고 생각합니다.

다른 팁

EAV는 종종 맵 값을 몇 가지 기본 유형으로 매핑 할 수 있기 때문에 상당히 잘 작동합니다. 개인 프로젝트에는 다음과 같은 테이블이 있습니다.

entity_id     : INTEGER REFERENCES entities(id)
attr_id       : INTEGER REFERENCES attributes(id)
value_bool    : BOOLEAN
value_int     : INTEGER
value_string  : VARCHAR
value_text    : TEXT

Attr_id에 대한 Infos는 속성 유형과 이름 등을 찾을 수있는 다른 테이블에 저장됩니다. 또한 문자열과 텍스트의 차이점은 텍스트가 '전체 텍스트'검색 인덱스를 가질 수 있고 String은 기본 일치 색인화만으로도 '전체 텍스트'검색 인덱스를 가질 수 있다는 것입니다.

AttrBute를 쿼리하려면 Attributes 테이블에서 aptrbute를 찾은 다음 "att_id = 12 및 value_string = 'sfds'와 같은 올바른 조건을 설정하여 쿼리를 조정합니다.

쿼리 속도를 높이려면 다음과 같은 듀얼 열에서 조건부 색인을 만듭니다.

CREATE INDEX test ON eav(attr_id, value_int) WHERE value_int IS NOT NULL;

대안은 또한 JSON 필드가 포함 된 열을 색인하고 검색 할 수있는 사용자 정의 DB 함수를 갖는 것입니다. 훨씬 더 힘든 일 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top