技術的には、両方のアプローチを使用できます。
問題は、再利用の問題に要約されます。このサイトを追加の世論調査に使用するつもりなら、あなたの同僚のアプローチは正しいです。
ただし、これが単発タイプの取引である場合は、最初から何を始めても問題ありません。
あなたのアプローチにより、コード/セットアップが大幅に少なくなります。EAV モデルの複雑さを理解するには、もう少し時間がかかります。特に報告に関して。EAV 設計を使用してパフォーマンスの高いクエリを構築することは、気弱な人向けではありません。
確かに中間点はあります。つまり、ログイン情報を独自のテーブルに分離し、関心のある 4 つの列だけを含む「投票」回答テーブルを作成します。このアプローチには、EAV アプローチのような柔軟性はありませんが、構造に関する標準的な DB 設計基準を満たし、まとめてクエリを実行するのは非常に簡単です。
最後に、4 番目のオプションがあります。自分で作成する代わりに、無料のポーリングを行うサイトの 1 つにサインアップするだけです。例: http://www.micropoll.com/ 注: 私は彼らと提携していませんし、彼らの製品を使用したこともありません。それは、2 秒の Google 検索でポップアップ表示されたサイトでした。
コメントによる更新はい、元の構造に対して簡単なクエリを実行できます。例えば:
ユーザー数のカウント:
select count(*) from users
はいと答えた人の数を数えます: 同意するにははい
_1:select count(*) from users where agree_1 = 'yes'
両方にselect count(*) from users where agree_1='yes' and agree_2='yes'
はい: どちらにも:select count(*) from users where agree_1='yes' or agree_2='yes'
いいえと答えた人の数を数えます: 同意するには
いいえ_1:select count(*) from users where agree_1 = 'no'
両方にselect count(*) from users where agree_1='no' and agree_2='no'
いいえ: どちらにもいいえ:select count(*) from users where agree_1='no' or agree_2='no'
コメントのみを表示
:select reason_1, reason_2 from users
はいのみselect reason_1 from users where agree_1 = 'yes'
select reason_1 from users where agree_1 = 'yes' union all select reason_2 as reason_1 from users where agree_2 = 'yes'