Vaše první schéma je lepší volbou z těchto dvou. V tuto chvíli byste si neměli dělat starosti s problémy s výkonem. Starejte se o vytvoření dobrého, flexibilního a rozšiřitelného designu. Existují různé triky, které můžete později udělat, abyste data uložili do mezipaměti a zrychlili dotazy. Použití méně flexibilního databázového schématu k vyřešení problému s výkonem, který se nemusí ani uskutečnit, je špatné rozhodnutí.
Kromě toho je mnoho (možná většina) výsledků průzkumů prohlíženo pouze pravidelně a malým počtem lidí (organizátoři akcí, administrátoři atd.), takže nebudete neustále hledat v databázi všechny výsledky. A i kdybys byl, výkon bude v pořádku. Výsledky byste pravděpodobně stejně nějak stránkovali.
První schéma je mnohem flexibilnější. Ve výchozím nastavení můžete zahrnout otázky, jako je jméno a adresa, ale u anonymních průzkumů je jednoduše nelze vytvořit. Pokud chce tvůrce průzkumu zobrazit pouze odpovědi všech na tři otázky z pěti set, je to opravdu jednoduchý SQL dotaz. Můžete nastavit kaskádové mazání pro automatické mazání odpovědí a otázek při smazání průzkumu. Generování statistik bude s tímto schématem také mnohem jednodušší.
Zde je mírně upravená verze schématu, které jste poskytli. Předpokládám, že dokážete zjistit, jaké datové typy kam jdou :-)
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