SQL Server domanda denormalizzazione - memorizzare i dati utente in 1,3 o 21 tavoli?
-
26-09-2019 - |
Domanda
Una sezione di chiamate nostro sito web per chiedere all'utente 20 domande a scelta multipla su se stessi (un "profilo"). Questa parte del sito sarà visto di frequente, e di tanto in tanto aggiornato. Il sito web si prevede di sviluppare una elevata quantità di traffico, quindi qualche considerazione viene data per cercare di prepararsi per problemi di prestazioni.
I 3 modi che posso vedere per memorizzare questo nel DB sono:
-
Crea 1 tabella per ogni domanda, ogni tavolo ha QuestionID e risposta, quindi una tabella CustomerInfo per memorizzare i dati del profilo, con chiavi esterne mappati alle domande.
-
Domanda, Question_Type e tavoli risposte. Roba tutto in questi costrutti. La mia preoccupazione qui è, in particolare, le 20 o giù di lì inserti necessari per aggiornare un profilo. E 'questo sarà un calo di prestazioni ad elevati volumi di traffico?
-
Denormalizzato tavolo singolo, un campo per ogni domanda, hard-code dei codici di risposta in HTML e / o in un oggetto C #.
sto appoggiato verso 2 # o # 3. Cosa pensi sarebbe la soluzione migliore?
Soluzione
I creerebbe le seguenti tabelle:
Survey (PK:SurveyID)
Question (PK:QuestionID, FK:SurveyID)
QuestionAnswer (PK:QuestionAnswerID, FK:QuestionID)
QuestionResponse (PK:QuestionResponseID, FK:QuestionAnswerID, FK:UserID)
È possibile ridurre al minimo il carico facendo gli inserti in un'istruzione, per esempio:.
insert into QuestionResponse
(QuestionAnswerID, UserID)
select 23, 3
union all
select 72, 3
union all
select 488, 3