Tôi đang cố triển khai một bài trắc nghiệm trắc nghiệm và sẽ lưu trữ tất cả các câu hỏi và câu trả lời của mình trong cơ sở dữ liệu SQLite. Tôi sẽ có nhiều câu hỏi, và đối với mỗi câu hỏi sẽ có 2 hoặc nhiều câu trả lời có thể hiển thị.Lưu trữ một bài kiểm tra trắc nghiệm trong cơ sở dữ liệu - quyết định lược đồ
Câu hỏi của tôi là, làm cách nào để lưu trữ các câu hỏi và câu trả lời trong cơ sở dữ liệu? Tôi có hai ý tưởng cho một schema (khóa chính in đậm)
- như (nhiều nhiều)
câu hỏi (questionID: int, questionString: String, correctAnswerID: int)
câu trả lời (answerID: int, answerString: string)
questions_and_answers (questionID, answerID)
2.
câu hỏi (questionID: int, questionString: String, correctAnswerID: int)
câu trả lời (answerID: int, answerString: String, questionID: int khóa ngoài)
Tôi không chắc cái nào tốt hơn, hoặc nếu có cách nào khác?
Có lẽ questions_and_answers
sẽ rất lớn và gây ra thời gian truy xuất và sự cố bộ nhớ lâu? Sau đó, một lần nữa, tôi giả định question_and_answers
sẽ được lập chỉ mục trên các khóa chính. Trong lược đồ thứ hai, answers
sẽ được lập chỉ mục trên answerID
và không phải là questionID
? có nghĩa là thời gian tìm kiếm sẽ tăng lên khi toàn bộ bảng sẽ phải được tìm kiếm?
Có thể có ~ 10.000 - 20.000 câu trả lời. (bài kiểm tra có thể chạy trên thiết bị di động và các câu hỏi sẽ cần phải được hiển thị "ngay lập tức")
Lưu ý: Tôi không mong đợi có nhiều câu trả lời trùng lặp giữa các câu hỏi. Tôi sẽ không nghĩ rằng số lượng chồng chéo sẽ có nghĩa là ít dữ liệu được lưu trữ, xem xét thêm không gian được yêu cầu bởi questions_and_answers
bảng
Câu trả lời của bạn có thực sự có khả năng được sao chép qua nhiều câu hỏi không? – Tenner
Tại một dự đoán thô, tôi có thể nói rằng 30% câu trả lời sẽ xuất hiện trong nhiều câu hỏi –