sql >> データベース >  >> RDS >> Database

オンライン調査のためのデータベースモデル。パート4

    4部構成のシリーズのこの最後の記事では、オンライン調査データベースの設計を完了して、複数の調査、質問の再利用、複数の選択肢の回答、質問の順序付け、回答に基づく調査の条件付きジャンプ、および調査所有者のグループを介して、ユーザーの調査へのアクセスを制御します。

    はじめに

    このシリーズの記事のパート3の結論として、この記事にさらに高度な機能を追加することを述べました。これらの高度な機能は次のとおりです。

    • 管理 調査の
    • レポート および分析

    念のため、パート3の後のモデルを次に示します。



    管理

    調査の管理における私の目標は、調査とそれに対応する情報をグループで管理できるようにすることです。そこで、管理ユーザーがオンライン調査とその質問を共同で管理できるユーザーのグループを定義できるようにします。グループの所有者は、グループの他のユーザーが実行できる機能を定義できます。たとえば、ジェフは調査と質問を変更および削除できますが、ジョーは調査と質問のみを表示でき、それらを変更または削除することはできません。

    お気づきかもしれませんが、ユーザーは調査の回答者とは別です。もちろん、ユーザーがアンケートに回答することもありますが、回答者からの情報がユーザーよりも少なくて済むように、それらを分離しておく必要があります(たとえば、回答者からパスワードフィールドを削除して、ログイン/アカウントを作成しなくても、アンケートに回答しやすくなります。

    基本的に、この管理では、グループとユーザー、および許可される役割と対応する権限またはアクションのテーブルを作成します。これにより、役割と各役割で許可されるアクションとの間のハードコードされたリンクではなく、柔軟性が得られます。もちろん、対応するアプリケーションは、各権限で許可される機能を理解するように構築する必要があり、新しい機能が追加されたときに適応させる必要がありますが、機能が追加されたときにデータベース設計を変更する必要はありません。新しい行がに追加されます。役割を権限にリンクするテーブル。

    また、emailに奇数の長さを使用していることに気付くかもしれません。 userの列 およびrespondent テーブルとip_addressの奇数値 respondentの列; 254は、RFC定義に従って電子メールアドレスが使用できる最大長であり、45は、IPv6アドレス(IPv4トンネリングを使用)が使用できる最大長です。




    さらに、groupからのリンクを追加します surveyへのテーブル リンクが関連するすべてのテーブルに移動するテーブル(question_ordersurvey_responseconditional_orderquestion_typeresponse_choice )。このようにして、グループが削除されるときに、対応するすべての情報が削除されることをグループの所有者に警告できます。

    私は、データを何にもリンクしないよりも、テーブルデータを特定のユーザー以外のものにリンクするこのアプローチを好みます。このシリーズの記事の前の部分で行ったように、データを何にも(グループでもユーザーでもない)リンクしなかった場合、ユーザーがオンライン調査から削除されたときに古いデータを「クリーンアップ」するという課題が発生します。応用。より抽象的な概念「グループ」にリンクすることにより、所有者は、必要に応じて、グループの所有権と対応するすべてのデータ(調査、質問、回答など)をグループの別のメンバーに再割り当てすることができます。

    フォーマルデザイン

    次に、このシリーズの記事の他の部分で作成されたERDを拡張します。




    パート1の記事で作成したテーブルを黄色で、パート2で追加したテーブルをオレンジで、パート3で追加したテーブルを緑で、新しく追加したテーブルを水色で色付けしました。追加を参照してください。この最後の記事で追加された列と外部キーには色が追加されていないため、現在のモデルをパート3の前のモデルと比較して、違いを確認する必要があります。

    レポートと分析

    いくつかのレポートを作成するために、テーブルから抽出できる十分な情報があります。

    たとえば、特定の方法で回答された質問はどれですか(「調査7で、回答者は質問10に「はい」と答えた回数は?」)。このレベルの情報は、調査の回答に関する基本的なレポートにはおそらく問題ありません。

    また、回答者が特定の調査に回答するのにかかった時間を抽出することもできます(「調査5では、調査に費やされた平均時間は13分でした」)。繰り返しになりますが、これは、調査の所有者が調査の質問を調整して、一般的な回答者が費やす意思がある時間や、調査員が回答者に「約束した」時間よりも多くの時間を必要としないようにするための有用な情報になる可能性があります(例:「この調査5〜10分かかるはずです」)。誰かが私に10分以内に完了する必要があると言っても、15分後も質問に答えていると、私は腹を立て、彼らからの別の調査に回答することを嫌がります。

    回答者のIPアドレスに基づいて、逆引き参照を実行して、回答者がどこから来たのか、または少なくとも回答時にIPアドレスがどこから来たように見えるかを概算することができます。人々はVPNまたはIPアドレスを物理的な場所から分離する他のメカニズムを介して接続する可能性があるため、この情報は完全に信頼できるものではないことに注意してください。

    最初の回答者が質問にどのように回答したか、後者の回答者がどのように回答したかを抽出することもできます。これは、調査に興味深い角度を与える可能性があります。たとえば、調査に最初に回答した熱心な人々は、それほど熱心ではなく、後で調査に回答した人々とは異なる回答をしましたか?

    この段階では、これらのレポートで十分であり、より高度な分析は必要ないと思います。最も重要な情報は、調査の各質問にどのような回答があったかについての基本的なレポートであることは明らかです。より高度な分析が必要な場合は、要件とは何か、既存のデータまたは新しい構造がそれらの分析をどのようにサポートできるかを検討してください。

    結論

    そして、あなたはそれを持っています。これが理想的なオンライン調査データベースの設計であるとは言いませんが、これは柔軟性の観点から私のニーズを満たします:複数の調査、質問の再利用、複数の選択肢の回答、質問の順序、に基づく調査の条件付きジャンプ回答、および調査所有者のグループを介した調査へのユーザーのアクセスの制御。

    このシリーズの記事の前の各部分で行ったように、他の要件がある可能性があることを指摘します。要件を特定し、必要なものを実装または適応させます。私は、車輪の再発明ではなく、再利用を強く信じています。


    アプリケーションのニーズに応じてこのモデルを再設計または拡張することをご希望の場合は、お知らせください。私たちはあなたを助けることができます。


    オンライン調査用のデータベースモデル–シリーズ全体

    パート1 パート2 パート3 パート4

    1. SQLServerの既存のテーブルに外部キー制約を追加する方法-SQLServer/TSQLチュートリアルパート68

    2. SQL Server Management Studioで複合キーを作成するにはどうすればよいですか?

    3. 実際の例、SQLでOUTER /CROSSAPPLYを使用する場合

    4. Node.jsを介してPostgresに接続する方法