Có vẻ như bạn đã được thông báo rằng bạn đang đi lạc xuống mô hình EAV . Hãy xem hình ảnh ở đây để biết lý do tại sao nên tránh mô hình EAV bằng mọi giá.
Bill Karwin, tác giả chịu trách nhiệm cho hình ảnh trên, đã viết một cuốn sách "SQL Antipotype: Tránh những cạm bẫy của lập trình cơ sở dữ liệu" và ông dành chương đầu tiên cho mô hình chống EAV. Anh ta cũng là một người gây hấn lớn trong nhóm này và rất lớn trên StackOverflow (đối với các vấn đề về cơ sở dữ liệu).
Lời khuyên của tôi là nên có một bảng cho từng loại kết quả và sau đó sử dụng VIEW
s để kết hợp chúng khi cần thiết.
Ví dụ, bạn có thể có
CREATE TABLE char_result
(
question_id INT,
user_id INT,
cresult CHAR,
result_correct BOOLEAN (or equivalent in your RDBMS)
..
<other stuff>
..
);
Thực hiện tương tự cho num_result, ngoại trừ thay thế nresult INT (FLOAT ... bất cứ điều gì) cho cresult - ý tưởng tương tự cho VARCHAR & c.
Sau đó tạo VIEW
s trên các bảng kết quả khác nhau của bạn cho result_correct
(và các trường khác - number_of_attempts
... & c. - cho dù các trường khác của bạn là gì). Trong trường hợp này, bạn đang so sánh lượt thích với lượt thích và không tính toán tương đương với việc thêm dân số vào độ cao theo hình ảnh vui nhộn được tham chiếu ở trên!