사용자 정의 양식 빌더를위한 데이터베이스 디자인 (및 결과 저장)
-
11-09-2019 - |
문제
나는 제공 한 것과 유사한 맞춤 양식 빌더를 구현하려고합니다. 우푸 그리고 Google.
이러한 사용자 정의 양식을 만들기 위해 간단한 UI를 만들었지 만 내 문제는 데이터베이스 디자인에 있습니다. 양식을 작성하면 JSON 구현이 데이터베이스에 저장되고 (이를 개선하고 싶습니다), 사용자가 볼 수있는 양식을 작성하도록 참조했습니다.
제출되면 양식의 모든 필드를 데이터베이스에 저장하고 싶습니다. 데이터베이스 설계에 사용되는 JSON 구조에 따라 쉽게 이루어집니다. 하지만 각 개별 필드를 검색 할 수 있기를 바랍니다.
질문 :
- 양식 디자인을 저장하는 더 좋은 방법이 있습니까?
- 어떤 데이터 구조/모델이 양식의 결과를 저장할 수 있습니까? 나는 EAV가 가능성이있을 수 있다는 것을 알았지 만, 관련된 입력 유형 (드롭 다운, 확인란, 텍스트, 텍스트)으로 인해 지루할 수 있습니다.
- 어떤 구조가 가장 쉬운 검색을 허용하고 어디에서 조항을 사용할 수 있습니까? 주어진 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 함수를 갖는 것입니다. 훨씬 더 힘든 일 ...