온라인 설문 조사를 진행 중입니다. 대부분의 질문은 답변에 대해 1-5의 척도를가집니다. 설문 조사에 질문을 추가해야하는 경우 간단한 표 형태의 웹 양식을 사용하여 해당 표에 INSERT를 수행합니다. 설문 조사가 새로운 질문을하고 있습니다. 새로운 코드가 없거나 데이터베이스 구조가 바뀌 었습니다.다른 데이터 유형의 답이있는 설문 조사를위한 SQL 디자인
다른 데이터 유형의 답을 가질 수있는 설문 조사 질문을 추가해야합니다. 스펙은 설문 조사를 '구성 가능'하게하여 미래의 어떤 시점에서, "{텍스트 응답 질문}, {1-5 질문}, {진정한 거짓 질문}을 묻는 새로운 설문 조사가 필요합니다. , {날짜 답을 묻는 질문} "과 같이 데이터베이스 구조를 변경하지 않고 할 수 있습니다.
나는 그 답을 저장하는 가장 좋은 방법을 생각하려고 노력하고 있지만, 내가 생각해내는 모든 방법은 어느정도 해킹 된 것처럼 보인다.
일부 질문에는 예/아니요 또는 참/거짓 대답이있을 수 있으며 일부는 정수 답변 ("지난 달에 몇 번 기술 지원을 사용 했습니까?") 일 수 있으며, 다른 대답에는 날짜가있을 수 있습니다. 문자열, 단일 값이있는 객관식, 다중 값이있는 객관식 또는 때로는 특정 대답 값으로 하위 질문이 표시 될 수 있습니다 ("실망한 이유는 무엇입니까?")
간단한 해결책은 각 질문을 설문지의 한 열에, 설문지의 답변을 설문지로, 설문지의 열로 물을지 여부를 결정하는 것입니다. 이것은 나에게 엉망인 것처럼 느껴진다. 그것은 큰 테이블이다. 매우 '관계형'이 아닙니다.
브레인 스토밍은 각 응답 유형마다 다른 표를 사용하는 것이 가장 좋은 방법이지만 데이터 무결성 문제가 발생하기 쉽습니다. 즉, 내가 위의와
CREATE TABLE `Questions` (...);
CREATE TABLE `TrueFalseAnswers` (...);
ALTER TABLE `TrueFalseAnswers`
ADD CONSTRAINT `TrueFalseAnswers_ibfk_1` FOREIGN KEY (`question_id`)
REFERENCES `Questions` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
CREATE TABLE `TextAnswers` (...);
ALTER TABLE `TextAnswers`
ADD CONSTRAINT `TextAnswers_ibfk_1` FOREIGN KEY (`question_id`)
REFERENCES `Questions` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
등
한 가지 문제가있을 것입니다 내가 적어도 오직 하나의 대답은 혼자 DDL의 모든 질문에 대한 존재 보장 할 수 있다는 것입니다.
또 다른 해결 방법은 질문 테이블의 대답에 대한 이진 또는 문자열 열을 갖고 모든 대답을 일부 문자열 또는 이진 형식으로 인코딩 한 다음 응답 열에 저장하는 것입니다. 그러면 모든 질문에 대해 적어도 하나의 대답 만 나오지만 SQL 쿼리에서 집계 기능에 액세스 할 수 없게됩니다. 이것은 매우 '관계형'솔루션이 아니라는 의미에서 나를 강타합니다.
그래서 위에서 설명한 아이디어에 문제가 있습니다. 이 문제를 해결할 수있는 최선의 방법이 있습니까?
나는 문제와 생각을 말로 표현할 시간을 가졌으므로, 내가 생각하는 광범위한 문제는 "코딩을하지 않고 임의의 유형의 데이터를 저장하고 싶습니다."라고 생각합니다. "이것은 희망이 없는가?
MySQL을 사용하고 있으므로 다른 RDBMS가 액세스 할 수있는 권한이 없습니다.
http://stackoverflow.com/questions/1764435/database-design-for-a-survey – Anton
데이터 유형에 대한 스트레스가 없습니다. 모든 텍스트를 만들고 코드에서 파싱합니다. – Shawn
네, 모든 텍스트를 만들면 쿼리가 덜 효율적이게됩니다. 날짜에 대한 대답이 있다고 가정하고 날짜 범위 쿼리를 수행하려고합니다. 심각한 코딩! 그러나 응답이 날짜 열 유형에 저장되어 있으면 날짜 범위 쿼리에 문제가 없습니다. – user151841