Chúng tôi đang phát triển một ứng dụng .NET với một máy chủ SQL back-end. Máy khách yêu cầu khả năng tự động thêm các thuộc tính tùy chỉnh vào các thực thể sau khi ứng dụng đã được triển khai.Cho phép người dùng cuối tự động thêm các cột vào một bảng
Như được đề xuất in a similar question chúng tôi có thể tạo bảng, sau đó sẽ chứa một hàng cho mỗi giá trị thuộc tính tùy chỉnh (Entity-attribute-value mô hình). Tuy nhiên, chúng tôi đang xem xét cho phép người dùng cuối thực sự sửa đổi bảng (also suggested trong cùng một câu hỏi), tức là thêm và xóa cột.
(Edit: như đã nêu trong các ý kiến, DDL sẽ không được thực hiện trực tiếp bởi người sử dụng hoặc các ứng dụng, nhưng thông qua các thủ tục lưu trữ đảm bảo rằng tất cả mọi thứ chạy rất tốt)
Nguyên nhân chủ yếu là:
- Thuộc tính hiệu suất/tìm kiếm được cải thiện
- Các thuộc tính hầu như luôn được yêu cầu xuất hiện dưới dạng cột, ví dụ: trong lưới dữ liệu trong giao diện người dùng hoặc khi trích xuất dữ liệu để xử lý thêm trong Excel/PowerPivot.
- Dữ liệu được gõ mạnh (như trái ngược với lưu trữ tất cả các giá trị thuộc tính như varchar)
- Một mô hình dữ liệu đơn giản
Có bất kỳ hãy cẩn thận rằng chúng ta cần phải nhận thức?
Những điều mà tôi suy nghĩ là:
- Sao lưu/khôi phục các hoạt động mà có thể không có khả năng xử lý các cấu trúc dữ liệu thay đổi
- đối tượng phụ thuộc (như lượt xem) mà không được cập nhật để phản ánh đúng những thay đổi này (chế độ xem phụ thuộc sẽ phải thực hiện
select * from table
để bao gồm bất kỳ cột nào được thêm). - ...
Bất kỳ đầu vào nào về phương pháp này đều được đánh giá cao.
Đây có lẽ là một trường hợp trong đó mô hình [Entity-attribute-value] (http://en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model) không được chuẩn hóa ở nơi các thuộc tính được lưu trữ dưới dạng hàng thực sự sẽ có ý nghĩa nhất. – mellamokb
Có, vui lòng không cho phép người dùng ném cờ lê khỉ vào cơ sở dữ liệu của bạn. Ít nhất với EAV bạn có thể có một số kiểm soát những gì họ đang tàn phá ... http://sqlblog.com/blogs/aaron_bertrand/archive/2009/11/19/what-is-so-bad-about-eav -anyway.aspx –
@AaronBertrand, cảm ơn liên kết, một số điểm tốt ở đó. Tuy nhiên, ông đề cập đến những hạn chế tương tự đã khiến chúng tôi khám phá cách tiếp cận không phải EAV. Chúng tôi sẽ không cho phép người dùng thực thi DDL trực tiếp. Một vài thủ tục được lưu trữ sẽ phục vụ như là chìa khoá khỉ không thấm, đảm bảo rằng các hoạt động thêm/xóa chạy trơn tru. Ngoài ra, chỉ những người dùng đủ điều kiện mới có quyền thực thi những điều này. – bernhof