SQL Server Dechormalization سؤال - تخزين بيانات المستخدم في 1،3 ، أو 21 جدول؟

StackOverflow https://stackoverflow.com/questions/2625442

سؤال

يدعو قسم من موقع الويب الخاص بنا بطرح 20 أسئلة من متعددة الخيارات حول أنفسهم ("ملف تعريف"). سيتم عرض هذا الجزء من موقع الويب بشكل متكرر ، وتحديثه أحيانًا. من المتوقع أن يطور موقع الويب قدرًا كبيرًا من حركة المرور ، لذلك يتم إعطاء بعض الاعتبار لمحاولة الاستعداد لمشكلات الأداء.

الطرق الثلاث التي يمكنني رؤيتها لتخزين هذا في DB هي:

  1. قم بإنشاء جدول واحد لكل سؤال ، يحتوي كل جدول على QuestionId والإجابة ، ثم جدول CustomerInfo لتخزين بيانات الملف الشخصي ، مع تعيين مفاتيح أجنبية على الأسئلة.

  2. سؤال ، Question_type ، والجداول الإجابات. قم بتوجيه كل شيء في هذه البنيات. قلقي هنا هو على وجه الخصوص 20 إدراجًا أو نحو ذلك المطلوب لتحديث ملف تعريف. هل سيكون هذا بمثابة نجاح في أحجام المرور العالية؟

  3. جدول واحد غير طبيعي ، حقل واحد لكل سؤال ، قم برملة صلبة في رموز الإجابة في HTML و/أو في كائن C#.

أنا أميل نحو #2 أو #3. ما رأيك سيكون أفضل حل؟

هل كانت مفيدة؟

المحلول

أود إنشاء الجداول التالية:

Survey (PK:SurveyID)
Question (PK:QuestionID, FK:SurveyID)
QuestionAnswer (PK:QuestionAnswerID, FK:QuestionID)
QuestionResponse (PK:QuestionResponseID, FK:QuestionAnswerID, FK:UserID)

يمكنك تقليل الحمل عن طريق إجراء الإدراج في عبارة واحدة ، على سبيل المثال:

insert into QuestionResponse
(QuestionAnswerID, UserID)
select 23, 3
union all
select 72, 3
union all
select 488, 3
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top