sql >> Databasteknik >  >> RDS >> Mysql

Schemadesign för när användare kan definiera fält

Ditt första schema är det bättre valet av de två. Vid det här laget bör du inte oroa dig för prestandaproblem. Oroa dig för att göra en bra, flexibel, utdragbar design. Det finns alla möjliga knep du kan göra senare för att cache data och göra frågor snabbare. Att använda ett mindre flexibelt databasschema för att lösa ett prestandaproblem som kanske inte ens inträffar är ett dåligt beslut.

Dessutom ses många (kanske de flesta) enkätresultat endast periodiskt och av ett litet antal personer (arrangörer, administratörer, etc.), så du kommer inte ständigt att fråga databasen efter alla resultat. Och även om du var det, kommer prestationen att bli bra. Du skulle förmodligen paginera resultaten på något sätt ändå.

Det första schemat är mycket mer flexibelt. Du kan som standard inkludera frågor som namn och adress, men för anonyma undersökningar kan du helt enkelt inte skapa dem. Om enkätskaparen bara vill se allas svar på tre frågor av femhundra, är det en väldigt enkel SQL-fråga. Du kan ställa in en överlappande radering för att automatiskt ta bort svar och frågor när en undersökning raderas. Att generera statistik blir mycket lättare med detta schema också.

Här är en något modifierad version av schemat du angav. Jag antar att du kan ta reda på vilka datatyper vart går :-)

    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


  1. EXTRACT() Exempel – MySQL

  2. För många automatiska ökningar med PÅ DUBLIKAT UPPDATERING AV KEY

  3. Ställ in inmatningsvärde vid val av alternativ i php

  4. Arbeta med JavaFX UI och JDBC Applications