2013-01-22 30 views
7

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.

+2

Đâ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

+2

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 –

+0

@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

Trả lời

3

tôi làm việc với một ứng dụng của bên thứ ba để xử lý này theo nhiều cách khác nhau:

  1. Hầu hết các bảng có một phiên bản 'tùy chỉnh' của bảng với các lĩnh vực khác nhau để giữ kiểu dữ liệu tổng quát tên: Number1, Date26 , Text3, v.v.). Vì vậy, có Company và CompanyCustom có ​​mối quan hệ 1-1.
  2. Danh sách được tạo trên bảng có ListID (và cách tương ứng để người dùng thiết lập giản đồ) và khóa ngoài để liên kết với bảng chính. Bảng này có một số cột chung chung như # 1.

  3. tạo bảng của riêng bạn

  4. tạo các chế độ xem và thủ tục lưu trữ của riêng bạn và đăng ký chúng trong ứng dụng. Các bộ dữ liệu này có thể được gắn vào lưới dữ liệu và/hoặc được sử dụng trong báo cáo tùy chỉnh.

Có một giao diện để người dùng có thể gắn nhãn cột của chúng khi chúng thấy phù hợp (ví dụ: Text1 = "Blah Blah Blah").Có rất nhiều lĩnh vực lãng phí trong tình huống này (mặc dù công ty của tôi đã sử dụng hầu hết các lĩnh vực bao gồm Money47) và nó không lý tưởng cho hiệu suất, bạn không thể đánh bại tính linh hoạt gần như vô hạn mà chúng tôi có.

Điều quan trọng ở đây là khách hàng này sẵn sàng trả bao nhiêu cho khả năng này cùng với sự hỗ trợ đang diễn ra? Nếu bạn cho phép họ tạo trường tùy chỉnh trên bảng hiện có và họ quyết định họ muốn thay đổi loại dữ liệu không chuyển đổi suôn sẻ, họ có dự kiến ​​bạn sẽ trộn và chuyển đổi nó không?

Chúng tôi có thể thuê lập trình viên toàn thời gian cho những gì chúng tôi thanh toán cho hệ thống này. SalesForce.com và các trang tương tự có khả năng này. Tôi không nghĩ rằng bạn muốn nhận được điều này cho một ứng dụng khách hàng một lần. Họ cũng có thể trả tiền cho bạn để tiếp tục cập nhật ứng dụng trong thời gian dài.

+0

Nếu tôi hiểu bạn một cách chính xác, các thuộc tính "tùy chỉnh" (Số 1, Ngày 26, v.v.) tồn tại từ ngày đầu tiên và chỉ ngồi đó, chờ đợi để được điền dữ liệu? Tôi không phải là một fan hâm mộ lớn của phương pháp này mặc dù nó * không * loại bỏ một số những hạn chế ngay lập tức của thể chất sửa đổi một bảng. – bernhof

+0

Có, các trường đó đi kèm với ứng dụng. Tôi đồng ý, nó không phải là lý tưởng. – JeffO

+0

Cảm ơn bạn đã nhập. Thay vào đó, chúng ta sẽ tránh phương pháp động và thực hiện các thuộc tính mới cho mỗi yêu cầu. – bernhof

Các vấn đề liên quan