Tôi bị mắc kẹt trong cách xây dựng một truy vấn hiệu quả, trả về dữ liệu của cấu trúc EAV sau.
Ngày nay, một bảng sản phẩm đã tồn tại, chứa 4 trường cố định. Chúng tôi muốn nâng cấp hệ thống, cho phép vô số trường sản phẩm bổ sung, được xác định bởi nhà sản xuất của từng sản phẩm. Chúng tôi gọi những trường bổ sung này là 'tham số'.
Một tham số có thể thuộc loại dữ liệu sau:
- Bản văn
- Ngày (phạm vi)
- Boolean
- Dropdownvalue (đơn)
- Dropdownvalues (nhiều)
Dựa vào đó, tôi đã tạo ra mô hình cơ sở dữ liệu sau:
:
- Sản phẩm : bảng sản phẩm gốc, chứa các trường cố định.
- Tham số : bảng này xác định tất cả các loại tham số. Hiện tại 5: Văn bản, Ngày, Boolean, Giá trị thả xuống (đơn), Giá trị thả xuống (nhiều)
- Nhà sản xuấtParameter : bảng này lưu trữ các tham số được xác định bởi nhà sản xuất sản phẩm (Bảng nhà sản xuất không có trong hình) cho tất cả các sản phẩm của mình.
- ProductParameter : đây là nơi lưu trữ dữ liệu sản phẩm thực tế của tất cả các tham số đã xác định. Một tham số của loại 'Văn bản', lưu trữ thông tin của nó trong trường 'Văn bản', 'Ngày' trong 'DatumBegin' và 'DatumEnd', Bit / Boolean trong 'Boolean'.
- ParameterValueListItem : bảng này chứa các giá trị được xác định trước của các giá trị Dropdownlist cho cả khớp nối đơn và ghép. Đây là những giá trị bạn có thể thấy trong Danh sách thả xuống khi tạo hoặc thay đổi sản phẩm.
- ProductParameterValueListItem : đây là nơi dữ liệu sản phẩm thực tế được lưu trữ cho các giá trị Dropdownlist.
Tôi cần xây dựng một trang web trong ASP.NET C # hiển thị danh sách tất cả dữ liệu sản phẩm, bao gồm từng tham số được xác định với giá trị của sản phẩm đó. Tôi cần có khả năng lọc danh sách bằng cách tìm kiếm trên bất kỳ trường / tham số nào. Danh sách này cũng cần được sắp xếp trên bất kỳ trường / tham số nào.
Tôi đã cố gắng lọc danh sách bằng cách tham gia bên ngoài Sản phẩm - ProductParameter - ProductParametervalueListItem - ParameterValueListItem để có được kết quả bảng chứa tất cả dữ liệu và sau đó lọc danh sách đó bằng cách sử dụng mệnh đề động, được xây dựng và chuyển qua ứng dụng web. Điều này hoạt động khi bạn tìm kiếm trên 1 tham số nhưng khi bạn bắt đầu tìm kiếm trên nhiều tham số, bạn sẽ nhận được kết quả không chính xác vì mỗi tham số là một dòng khác nhau trong kết quả bảng và đơn giản là không có kết quả 'AND' giữa tham số A và B, bởi vì chúng không tồn tại trong cùng một bản ghi (dòng).
Bất cứ ai có thể tư vấn cho tôi làm thế nào điều này có thể đạt được? Giải pháp hoàn hảo nhất sẽ là 1 kết quả bảng, chứa tất cả dữ liệu và từng tham số được hiển thị dưới dạng một cột trong cùng một hàng sản phẩm. Đây có phải là quá phức tạp để xử lý ở cấp cơ sở dữ liệu?
Cảm ơn đã đọc đến đây. Mọi lời khuyên đều được chào đón.