PDA

View Full Version : Thêm dữ liệu vào CSDL SQL sao không để trùng dữ liệu [Help]



hiep_pv999
23-05-2010, 02:22
Em đang làm đồ án về thi trắc nghiệm.Em còn đang thắc mắc về việc làm sao để thêm 1 câu hỏi vào ngân hàng câu hỏi sao cho câu hỏi thêm vào không bị trùng trong CSDL ? Em có 1 ý tưởng :
Khi thêm 1 câu hỏi vào CSDL có thể kiểm tra câu hỏi đó trùng (kiểm tra về từ ) bao nhiêu phần trăm với những câu hỏi đã có trong CSDL !
Rồi sau đó hiển thị 5(tùy ý 1->10) câu có phần trăm câu nhất cho khách hàng chọn lựa nếu người dùng vẫn chọn thêm vào thì thêm vào !
Nhưng làm như vậy thì kiểm tra sẽ rất lâu cho CSDL lớn. Mong mọi người cho ý kiến về giải thuật kiểm tra được nhanh giúp em.
thanks!

Red Devilic 1
23-05-2010, 19:17
Câu hỏi của bạn khó trả lời quá :)

Có thể dùng các cách sau để giảm thời gian tìm kiếm

- Phân loại chủ đề các câu hỏi
- Trong cùng 1 chủ đề, lại tiếp tục phân loại các câu hỏi chi tiết hơn
- Có các từ khóa "key" ứng với câu hỏi đó

Còn việc tránh trùng lặp thì cũng rất khó ( với mình )
Ví dụ 1 trường hợp sau, 2 câu hỏi này là tương đương ?

- Nobel sinh ngày nào ?
- Cho biết Nobel ra đời vào thời điểm nào ?

Rõ ràng 2 câu hỏi trên về mặt tần suất xuất hiện các kí tự trùng nhau là ít.
Vì thế khó có thể dựa vào các từ trùng nhau để nhận biết.
Theo mình, với 2 câu hỏi trên có thể tạo các từ "key" như "Nobel", "ngày sinh".

Sau đó mới dựa vào các từ key này để tìm xem có trùng hay không :)
Đánh Index hoặc Partition cũng là 1 lựa chọn tốt

vzic
23-05-2010, 19:59
Theo em thì không được. Xét cụm từ "ngày sinh" thì trong câu "Cho biết Nobel ra đời vào thời điểm nào"? ko có. Nếu xét cụm "Nobel" thì cả 2 cùng có. Nhưng nếu 2 cùng nobel mà đã loại bỏ 1 cái rồi thì khi vowngs phải Nobel có bao nhiêu giải thì cũng sẽ bị bỏ luôn.
Ko ổn lắm :D

vuht2000
24-05-2010, 07:38
Việc đếm số từ trùng nhau thường không phải là tiêu chí tin cậy để đánh giá độ "giống nhau" của các câu hỏi, vì nó không bao gồm độ "gần nhau" (proximity) của các từ. Đây có thể coi là một bài toán text mining, nếu dùng giải pháp có sẵn của SQL Server thì tôi sẽ nghĩ ngay đến full text search. Bạn thử tìm hiểu hàm CONTAINSTABLE, trong đó nó so sánh chuỗi đầu vào với trường trong database và trả về giá trị RANK từ 0-1000 để đánh giá độ giống nhau của hai chuỗi (số càng lớn càng giống nhau).
Nếu không giải quyết được thì tôi nghĩ cần xây dựng thuật toán và phát triển dùng 1 ngôn ngữ bên ngoài, rồi gọi qua hàm CLR

Red Devilic 1
24-05-2010, 08:19
Ý của mình, là các từ khóa key này không nhất thiết phải có trong câu hỏi.
Một ví dụ đơn giản là khi các bạn lướt web, thường thấy ứng với 1 bài viết, có khá nhiều từ liên quan ( tag)

Cách xây dựng câu hỏi của mình, cũng tương tự như vậy