sql >> Database >  >> RDS >> Mysql

Schema-ontwerp voor wanneer gebruikers velden kunnen definiëren

Je eerste schema is de betere keuze van de twee. Op dit moment hoeft u zich geen zorgen te maken over prestatieproblemen. Maak je geen zorgen over het maken van een goed, flexibel, uitbreidbaar ontwerp. Er zijn allerlei trucs die u later kunt doen om gegevens in de cache op te slaan en query's sneller uit te voeren. Het gebruik van een minder flexibel databaseschema om een ​​prestatieprobleem op te lossen dat zich misschien niet eens voordoet, is een slechte beslissing.

Bovendien worden veel (misschien de meeste) onderzoeksresultaten slechts periodiek en door een klein aantal mensen (organisatoren van evenementen, beheerders, enz.) bekeken, dus u zult niet constant in de database zoeken naar alle resultaten. En zelfs als je dat was, zal de uitvoering prima zijn. Je zou de resultaten waarschijnlijk toch op de een of andere manier pagineren.

Het eerste schema is veel flexibeler. U kunt standaard vragen zoals naam en adres opnemen, maar voor anonieme enquêtes kunt u deze eenvoudigweg niet maken. Als de maker van de enquête alleen de antwoorden van iedereen op drie van de vijfhonderd vragen wil zien, is dat een heel eenvoudige SQL-query. U kunt een trapsgewijze verwijdering instellen om automatisch antwoorden en vragen te verwijderen wanneer een enquête wordt verwijderd. Het genereren van statistieken zal ook veel gemakkelijker zijn met dit schema.

Hier is een licht gewijzigde versie van het door u verstrekte schema. Ik neem aan dat je kunt achterhalen welke gegevenstypen waar naartoe gaan :-)

    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. Selecteer een door komma's gescheiden lijst terug, gegroepeerd op een ID

  2. Erlang Mysql:SQL-injecties voorkomen?

  3. INSERT van 10 miljoen queries binnen 10 minuten in Oracle?

  4. SQL Waar ELKE kolom gelijk is aan een waarde