2010-04-09 27 views
8

Tôi đang học Rails và mục tiêu thử nghiệm của tôi là nhận ra điều gì đó tương tự như Zoho Creator, Flexlist hoặc Mytaskhelper, tức là một ứng dụng mà người dùng có thể tạo lược đồ và chế độ xem cơ sở dữ liệu của riêng mình. Chiến lược tốt nhất để theo đuổi điều này là gì?Làm thế nào để tạo cơ sở dữ liệu tùy biến của người dùng (như trình tạo Zoho) trong Rails?

Tôi đã thấy điều gì đó về Giá trị thuộc tính-Entity nhưng tôi không chắc đó có phải là chiến lược tốt nhất hay không hoặc có hỗ trợ nào trong Rails cho nó hay không.

Nếu có bất kỳ hướng dẫn nào trong Rails về một dự án tương tự, nó sẽ tuyệt vời.

Có lẽ đây không phải là ngôi sao dễ nhất để học ngôn ngữ và khuôn khổ mới, nhưng nó sẽ là thứ tôi thực sự dự định làm từ rất lâu.

Trả lời

9

Đặt cược tốt nhất của bạn sẽ là MongoDB. Thật dễ dàng để tìm hiểu (vì ngôn ngữ truy vấn là JavaScript) và nó cung cấp một kho lưu trữ dữ liệu ít giản đồ. Tôi sẽ tạo một tài liệu cho mỗi biểu mẫu xác định cấu trúc của biểu mẫu. Sau đó, bất cứ khi nào người dùng gửi dữ liệu, bạn có thể đưa dữ liệu vào một cấu trúc chung và lưu trữ nó trong một bộ sưu tập dựa trên tên của biểu mẫu. Trong bộ sưu tập MongoDB giống như các bảng, nhưng bạn có thể tạo chúng ngay lập tức. Bạn cũng có thể tạo chỉ mục khi đang di chuyển để tăng tốc độ tìm kiếm.

Sự cố bạn đang cố giải quyết là một trong những trường hợp sử dụng chính cho cơ sở dữ liệu hướng tài liệu mà MongoDB là. Có một số cơ sở dữ liệu định hướng tài liệu khác trên mạng, nhưng theo MongoDB của tôi có API tốt nhất vào lúc này.

Tặng cho số MongoDB Ruby tutorial đọc và tôi chắc chắn bạn sẽ muốn thử.

KHÔNG sử dụng cơ sở dữ liệu quan hệ để thực hiện việc này. Tạo bảng trên bay sẽ khốn khổ và là một mối nguy hiểm bảo mật, không chỉ cho hệ thống của bạn, mà còn cho dữ liệu của người dùng của bạn. Bạn có thể tránh tạo bảng khi đang di chuyển bằng cách tạo một lược đồ phức tạp theo dõi các cấu trúc biểu mẫu và mỗi loại trường sẽ yêu cầu bảng riêng của nó. Rails làm cho điều này ít đau đớn với các hiệp hội đa hình, nhưng nó chắc chắn không phải là khá.

0

Tôi nghĩ rằng nó không chính xác những gì bạn muốn, nhưng điều này http://github.com/LeonB/has_magic_columns_fork nhưng dường như điều này làm một cái gì đó tương tự và bạn có thể nhận được một số ý tưởng để bắt đầu.

+0

điều đó thật thú vị, cảm ơn! – martjno

0

Có thể tạo bảng cơ sở dữ liệu bằng cách gửi lệnh DDL trực tiếp đến máy chủ hoặc bằng cách tạo động. Sau đó, bạn có thể tạo ra các mô hình ActiveRecord tương ứng bằng cách sử dụng Class.new (ActiveRecord :: Base) làm ... kết thúc. Về nguyên tắc, điều này sẽ có tác dụng, nhưng nó phải được thực hiện với sự chăm sóc nào đó. Nhưng điều này chắc chắn không có việc làm cho người mới bắt đầu.

Giải pháp thứ hai có thể là sử dụng MongoMapperMongoDB. Ý tưởng của tôi là sử dụng một bộ sưu tập để lưu trữ các hàng trong bảng của bạn và vì MongoDB là lược đồ ít hơn, bạn có thể chỉ cần thêm các thuộc tính.

0

Sử dụng cửa hàng tài liệu như mongodb hoặc couchdb sẽ là cách tốt nhất để chuyển tiếp vì chúng ít giản đồ hơn.

0

Sử dụng EntryAttributeValue cho phép bạn lưu trữ bất kỳ dữ liệu lược đồ nào trong một số lượng bảng được đặt, tuy nhiên các tác động hiệu suất và các vấn đề bảo trì được tạo ra có thể rất không đáng.

Hoặc bạn có thể lưu trữ dữ liệu của mình trong XML và tạo một lược đồ XML để xác thực.

Tất cả các giải pháp "chung" sẽ gặp sự cố với khóa ngoại hoặc các ràng buộc khác, bạn phải thực hiện tất cả xác thực đó trong bộ nhớ trước khi lưu trữ.

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