Skema pertama Anda adalah pilihan yang lebih baik dari keduanya. Pada titik ini, Anda tidak perlu khawatir tentang masalah kinerja. Khawatir tentang membuat desain yang bagus, fleksibel, dan dapat diperluas. Ada berbagai macam trik yang dapat Anda lakukan nanti untuk menyimpan data dan membuat kueri lebih cepat. Menggunakan skema database yang kurang fleksibel untuk memecahkan masalah kinerja yang bahkan mungkin tidak terwujud adalah keputusan yang buruk.
Selain itu, banyak (mungkin sebagian besar) hasil survei hanya dilihat secara berkala dan oleh sejumlah kecil orang (penyelenggara acara, administrator, dll.), sehingga Anda tidak akan terus-menerus menanyakan database untuk semua hasil. Dan bahkan jika Anda melakukannya, kinerjanya akan baik-baik saja. Anda mungkin akan membuat paginasi hasilnya entah bagaimana.
Skema pertama jauh lebih fleksibel. Anda dapat, secara default, menyertakan pertanyaan seperti nama dan alamat, tetapi untuk survei anonim, Anda tidak dapat membuatnya. Jika pembuat survei hanya ingin melihat jawaban semua orang atas tiga dari lima ratus pertanyaan, itu adalah kueri SQL yang sangat sederhana. Anda dapat mengatur penghapusan berjenjang untuk menghapus tanggapan dan pertanyaan secara otomatis saat survei dihapus. Membuat statistik juga akan jauh lebih mudah dengan skema ini.
Berikut adalah versi skema yang sedikit dimodifikasi yang Anda berikan. Saya berasumsi Anda dapat mengetahui tipe data apa yang pergi ke mana :-)
surveys survey_id (index) title questions question_id (index, auto increment) survey_id (link to surveys->survey_id) question responses response_id (index, auto increment) survey_id (link to surveys->survey_id) submit_time answers answer_id (index, auto increment) question_id (link to questions-question_id) answer