私はオンライン調査に取り組んでいます。ほとんどの質問には、回答の 1 ~ 5 のスケールがあります。調査に質問を追加する必要がある場合は、適切なテーブルに INSERT を実行する単純な Web フォームを使用します。アンケートは新しい質問を投げかけています。新しいコードやデータベース構造の変更はありません。
さまざまなデータ型の回答を持つことができるアンケートの質問を追加するよう求められています。仕様は、調査を「構成可能」にすることであり、将来の任意の時点で、「{text answer question}、{1-5 question}、{true false question} を尋ねる新しい調査が必要です」と言ったときに、 , {回答として日付を含む質問}", データベース構造を変更せずにそれを行うことができます.
私はそれらの答えを保存する最善の方法を考えようとしていますが、私が思いついた方法はどれもややハックのようです.
はい/いいえまたは真/偽の答えを持つ質問もあれば、整数の答え (「この 1 か月でテクニカル サポートを利用した回数は?」) を持つ質問もあれば、日付、文字列、複数の数字を持つ質問もあります。単一の値を持つ選択肢、複数の値を持つ複数の選択肢など。または、特定の回答値によってサブ質問が表示される場合があります (「何があなたを失望させましたか...?」)。
簡単な解決策は、各質問を調査の列として、その回答を調査の列として、それを調査の列として質問するかどうかを指定することです。これは私には混乱のように感じます。これは 1 つの大きなテーブルです。あまり「関係的」ではありません。
ブレーンストーミング、私が思いつく「最良の」方法は、回答の種類ごとに異なる表を用意することですが、データの整合性の問題が発生しやすいと感じています。言い換えれば、私は持っているだろう
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;
等
上記の問題の 1 つは、DDL だけでは、任意の質問に対して少なくとも 1 つだけの回答が存在することを保証できないことです。
もう 1 つの解決策は、質問テーブルに回答用のバイナリ列または文字列列を用意し、すべての回答を何らかの文字列またはバイナリ形式にエンコードして、回答列に格納することです。これにより、すべての質問に対して少なくとも 1 つだけの回答が得られますが、その後、SQL クエリの集計機能にアクセスできなくなります。これは、あまり「リレーショナル」なソリューションではないと思います。
ですから、上で概説したアイデアには問題があると思います。この問題を解決する「最善の」方法はありますか?
時間をかけて問題と私の考えを言語化した今、私が提起している大まかな問題は、「コーディングを行わずに任意の型のデータを保存したい...」ということのようです。絶望的?
私は MySQL を使用しているため、他の RDBMS にアクセスすることはできません。