Thường có nhiều cách để giải quyết vấn đề và đây không phải là ngoại lệ. Trong trường hợp này, những gì bạn đang tìm kiếm là cho phép người dùng thêm các trường mới vào ứng dụng và cơ sở dữ liệu của bạn và sử dụng các trường đó từ bên trong ứng dụng của bạn. Một số cách để làm điều đó là:
a) Cho phép người dùng sửa đổi giản đồ cơ sở dữ liệu.
b) Tạo cấu trúc riêng để xác định 'trường do người dùng xác định' và lưu trữ dữ liệu trong đó.
c) Tạo các trường 'được bảo lưu' không có giá trị trong các bảng nơi người dùng có nhiều khả năng cần các trường của riêng họ hơn.
Tôi thích (b) phương pháp tiếp cận và đôi khi (c) cách tiếp cận bất cứ khi nào người dùng xác định các trường tùy chỉnh là cần thiết trong một ứng dụng. Dưới đây là một số trong những ưu/khuyết điểm cho mỗi ba:
Sửa schema
• Risky: Nếu bạn cho phép người dùng chỉnh sửa database schema, nơi nào bạn vẽ đường? Nếu họ có thể thêm các trường, chúng cũng có thể thay đổi định nghĩa của các trường hiện có, thêm hoặc loại bỏ các chỉ mục, v.v. Điều này có thể dẫn đến cơn ác mộng hỗ trợ với lỗi, các vấn đề về hiệu suất, vv.
• Biểu diễn: lưu trữ nội dung do người dùng xác định mới trong bảng hiện có thường có lợi thế về hiệu suất qua cấu trúc riêng biệt, nhưng chỉ miễn là chúng không bị thay đổi quá mức.
• Clunky: EF xác định lược đồ tại thời điểm thiết kế, vì vậy để thực hiện công việc này trong thời gian chạy, bạn sẽ cần phải tạo các lớp thực thể mới trong thời gian chạy với các thành viên đại diện cho các trường mới và bạn cần cập nhật siêu dữ liệu bản đồ tại thời gian chạy. Các lớp thực thể được tạo thời gian chạy có thể kế thừa từ các lớp được tạo theo thời gian thiết kế, do đó bạn chỉ cần thêm các thành viên và ánh xạ cho các trường do người dùng định nghĩa mới. Mặc dù có thể, nó là clunky. Mã sử dụng các lớp được tạo theo thời gian chạy sẽ cần sử dụng sự phản chiếu để truy cập các thành viên mới được tạo ra trong thời gian chạy.
cấu trúc riêng biệt
• người dùng thân thiện: Bằng cách tạo ra một cấu trúc riêng biệt để lưu trữ các lĩnh vực tùy chỉnh, bạn có thể xây dựng logic ứng dụng cho người dùng thêm/gỡ bỏ những lĩnh vực vv Họ không cần phải gây rối với cơ sở dữ liệu, thay vào đó bạn có thể có biểu mẫu bảo trì trong ứng dụng để thêm các trường mới.
• Thân thiện với EF: không cần phải gây rối với các lớp thực thể và siêu dữ liệu bản đồ khi chạy. Mọi thứ được định nghĩa tại thời điểm thiết kế và các trường do người dùng định nghĩa chỉ là dữ liệu.
• Hiệu suất kém hơn: Việc có các bảng riêng biệt để xác định và lưu trữ các trường do người dùng xác định có thể khiến việc tra cứu tốn kém hơn một chút do các chuyến đi bổ sung hoặc tham gia bổ sung.
lĩnh vực reserved
• Thường đủ: Trong nhiều tình huống, các trường tùy chỉ được sử dụng cho một hoặc một vài trường bổ sung. Dự trữ một vài cột thường sẽ bao gồm 99% nhu cầu của người dùng. Ngay cả một trường "nhận xét" chung trong mỗi bảng thường đủ trong các ứng dụng LOB.
• Limited: Nếu người dùng muốn nhiều trường hơn số bạn đã đặt trước hoặc các loại dữ liệu khác mà bạn đã đặt trước thì đó có thể là giới hạn.
• Người biểu diễn: Cột nội tuyến, được truy xuất mà không cần thêm vòng hoặc gia nhập.
• Được xác định tại thời điểm thiết kế: Không có thời gian chạy rối tung với định nghĩa loại hoặc ánh xạ loại thực thể.
Vì vậy, bạn đã kết thúc với giải pháp nào? – Guillaume
Tôi thì không. Không bao giờ có thể kiểm tra hoặc nhận được bất cứ điều gì để làm việc. Tôi đã kết thúc với mã-đầu tiên trong thời gian dài anyway. –