2014-03-30 2 views
0

최근에 사용자가 웹 인터페이스를 사용자 정의하고 추가 할 수있는 시스템을 계획했습니다. 이 앱은 퀴즈 생성 시스템과 비교 될 수 있습니다. 내가 겪고있는 문제는 "가변적 인"숫자의 추가 기능을 애플리케이션에 적용 할 수있는 스키마를 설계하는 방법입니다.데이터가 정의되지 않은 데이터베이스 설계

제가 처음 보았던 옵션은 추가를위한 개체를 만든 다음이를 직렬화하고 고유 한 열에 넣는 것입니다. 내용이 자주 편집되지 않으므로 글을 자주 읽지 않아도되지만 매우 자주 읽습니다. (캐싱을 줄이면 사용 가능)

다른 옵션은 cassandra와 같은 mysql 또는 postgresql 이외의 것을 사용했습니다. 필자는 이전에 다른 데이터베이스를 사용해 본 적이 없지만 시스템 디자인을 향상시킬 수 있다면 어떻게 사용하는지 배우는 데 관심이 있습니다.

제목에 대한 모든 의견을 주시면 감사하겠습니다.

감사합니다.

* 편집은 29/3/14

데이터에 대한 일부 정보가 변경되는. 직렬화 된 객체를 사용하는 것에 대한 위의 아이디어는 위의 표에서 퀴즈의 이름, 퀴즈의 가치가있는 점 수, 정보를 포함하는 직렬화 된 객체를 저장할 퀴즈 데이터라는 열을 저장할 것이라고 말할 수 있습니다 질문에. 그래서 전반적인 목적은 다음과 같이 수 : 구조는 물론 다를 수

Questions(Array):{ 
    [1](Object):Question{ 
     Field-type(int):1 
     Field-title(string):"Whats your gender?" 
     Options(Array):{"Female", "Male"} 
     } 
    [2](Object):Question{ 
     Field-type(int):2 
     Field-title(string):"Whats your name?" 
     } 
} 

을하지만 일반적으로 내가 필드의 레이블을 유지하기 위해 다음 필드를 퀴즈에 필드의 유형을 determin하고 정수를 저장하는 것 및 해당 필드에 대한 옵션 (있는 경우).

+0

저장해야 할 요소와 개체를 동적으로 생성해야하는 구조에 대한 추가 정보를 제공 할 수 있습니까 –

+2

"system-in-a-system"디자인에주의하십시오. 당신은 EAV와 같은 무언가로 착륙 할 것입니다. 그것은 전통적인 관계형 데이터베이스에 매우 적합하지 않습니다. (저는 PostgreSQL을 전문적으로 사용하는 사람으로 말합니다). "schemaless"또는 유연한 스키마 DB를 진지하게 고려하십시오. –

답변

1

이 시나리오에서는 MongoDB을 살펴 보겠습니다.

그러나 MySQL을 사용하려면 디자인에서 entity-attribute-value 모델을 생각해 볼 수 있습니다. EAV 모델을 사용하면 다양한 속성 수를 포함하는 항목을 디자인 할 수 있습니다. 이것은 당신이 동적으로 여러 가지 다른 질문을 추가 할 것입니다

+-------------------------------------+ 
| QuizQuestions      | 
+----+---------+----------------------+ 
| id | type_id | question_txt   | 
+----+---------+----------------------+ 
| 1 | 1 | What's your gender? | 
| 2 | 2 | What's your name? | 
+----+---------+----------------------+ 

+-----------------------------------+ 
| QuestionTypes      | 
+----+--------------+---------------+ 
| id | attribute_id | description | 
+----+--------------+---------------+ 
| 1 |  1  | Single select | 
| 2 |  2  | Free text  | 
+----+--------------+---------------+ 

+----------------------------+ 
| QuestionValues    | 
+----+--------------+--------+ 
| id | question_id | value | 
+----+--------------+--------+ 
| 1 |  1  | Male | 
| 2 |  1  | Female | 
+----+--------------+--------+ 

+-------------------------------+ 
| QuestionResponses    | 
+----+--------------+-----------+ 
| id | question_id | response | 
+----+--------------+-----------+ 
| 1 |  1  | 1   | 
| 2 |  2  | Fred  | 
+----+--------------+-----------+ 

(:

편집

다음과 같이 당신은 당신의 디자인을 매핑 할 수 있습니다, 저장하고자하는 데이터 유형에 대한 당신의 업데이 트를 따라 QuizQuestions), 다른 유형 (QuestionTypes)을 선택하고 다른 옵션 (QuestionValues)으로 제한하고 해당 응답 (QuestionResponses)을 저장할 수 있습니다.

+0

해답을 가져 주셔서 감사합니다. 이것은 내가 관계형 데이터베이스 설정을 사용하고 응답, 질문 및 퀴즈를 저장하고 질문을 고유 식별자로 퀴즈에 연결하는 테이블을 갖는 것으로 생각한 또 다른 옵션입니다. mongodb 또는 Shealess DB가 여전히 최선의 선택일까요? – tiantang

관련 문제