동적 양식 작성기 양식 및 데이터베이스 디자인? [닫은]


30

사용자가 자신의 웹 기반 양식 (텍스트 상자, 선택 등)을 작성하고 사용자가 작성할 수 있도록 웹에 게시 할 수 있다고 가정하십시오.

동적 양식에 연결하기 위해 데이터베이스를 설계하는 방법에 대한 리소스 나 조언이 있습니까?

예를 들어, 각 양식 또는 지정된 양식의 다른 버전에 대해 하위 테이블을 작성 하시겠습니까?


답변:


35

사용자 입력을 기반으로 새 테이블을 동적으로 작성하는 것은 일반적으로 좋지 않습니다. 양식의 기본 구조가 변경되면 동적으로 생성 된 모든 테이블을 업데이트하여 새 열을 포함 시키거나 이전 열을 제거해야하므로 유지 관리 문제가 발생할 수 있습니다. 그런 다음 쿼리 할 테이블을 아는 문제가 있습니다 (아마도 새로운 모든 문제를 일으키는 동적 SQL로 이어질 것입니다). 그리고 아마도 성능 문제도 있을지 모르지만 그것이 얼마나 나쁠지는 확실하지 않습니다. 또한 테이블은 일반적으로 동일한 엔터티의 각 새 인스턴스 에 대해 동일한 테이블의 복사본을 가지지 않고 엔터티 유형 (예 : "웹 양식") 을 나타내는 데 사용됩니다 .

양식에 대한 단일 테이블을 제안합니다. 양식이 누구인지 식별하려면 각 양식에 식별자가 필요합니다.

형태
-----
  아이디 (PK)
  이름
  owner_id (FK to users.id)
  (다른 분야)

form_elements
-------------
  아이디 (PK)
  form_id (FK에서 forms.id로)
  element_type_id (FK에서 element_types.id로)
  표제
  (다른 분야)

element_types
-------------
  아이디 (PK)
  이름

element_list_values
-------------------
  아이디 (PK)
  element_id (FK에서 form_elements.id로)
  이름
  값
  (다른 분야 ??)

웹 응용 프로그램 forms을 사용하면 사용자를 적절한 엔터티로 추적한다고 가정하고 만든 사용자를 참조 하여 표에 저장할 양식을 만들 수 있습니다 . 양식은 form_elements해당 참조 forms테이블 로 채워 져서 어떤 양식에 속하는지, element_types어떤 유형인지 알 수 있습니다. element_types양식이 가질 수있는 다른 요소의 정적 (주로) 목록을 저장합니다. 유형은 "text_field", "drop_down_list", "radio_buttons", "checkbox"입니다. "drop_down_list"및 "radio_buttons"와 같은 유형 element_list_values의 경우 이러한 요소가 일반적으로 가진 목록에 가능한 옵션을 저장하기 위해 추가 테이블이 필요합니다 .


2
훌륭한 솔루션. TY
Jeff Borden

위에서 설명한 테이블 스키마를 우연히 채우는 데 사용하는 기존 웹 양식 빌더 GUI 도구에 대해 알고 있습니까? 관련이 있다면 .NET을 사용하고 있습니다. TY.
Jeff Borden

@JeffBorden : 아니요,하지만 거기에 무언가있을 것입니다.
FrustratedWithFormsDesigner

따라서 제출 된 양식을 기록하는 가장 좋은 방법은 form_submissions id (PK) form_id (FK to forms.id) user_id (FK to users.id) ... form_submission_elements id (PK) 와 같은 스키마를 사용하는 것이라고 가정합니다. (FK에서 form_submissions.id로) form_element_id (FK에서 form_elements.id로) value 맞습니까?
Jeff Borden

@FrustratedWithFormsDesigner이 스키마의 양식 필드와 필드 값에서 테이블을 생성하려면 어떻게 선택합니까?
Hermes Autran
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.