2014-04-08 21 views
29

Khi xem hướng dẫn, thường có một sự phân định giữa một lược đồ và một mô hình, đặc biệt là khi giao dịch với mongoose/mongodb. Điều này khiến việc chuyển sang postgresql hơi khó hiểu, vì 'mô hình' dường như không tồn tại trong hệ thống đó. Sự khác biệt mà hai phương pháp tiếp cận là gì?Mongoose: Schema vs Model?

Ví dụ: tương đương ORS/sql ORM của dòng này là gì?

(cầy mangut và express.js):

var userSchema = schema.define('local', { 
    username:  String, 
    password:  String, 
}); 

module.exports = mongoose.model('User', userSchema); 
+0

bản sao có thể có của [Tại sao Mongoose có cả lược đồ và mô hình?] (Http://stackoverflow.com/questions/9127174/why-does-mongoose-have-both-schemas-and-models) – JohnnyHK

+0

@JohnnyHK I đã cung cấp cho điều này một đọc thông qua, nhưng câu hỏi của tôi là hướng tới hướng tương đối công việc postgresql (hơn là một cuộc thảo luận hoàn toàn trong lĩnh vực Mongoose) – dnv

Trả lời

44

Trong mongoose, một sơ đồ thể hiện cấu trúc của một tài liệu cụ thể, hoặc là hoàn toàn hay chỉ là một phần của tài liệu. Đó là một cách để thể hiện các thuộc tính và giá trị mong đợi cũng như các ràng buộc và các chỉ mục. Một mô hình xác định một giao diện lập trình để tương tác với cơ sở dữ liệu (đọc, chèn, cập nhật, v.v.). Vì vậy, một lược đồ trả lời "dữ liệu trong bộ sưu tập này trông như thế nào?" và mô hình cung cấp chức năng như "Có bất kỳ bản ghi nào khớp với truy vấn này không?" hoặc "Thêm tài liệu mới vào bộ sưu tập". Trong các RDBMS thẳng, lược đồ được thực hiện bởi các câu lệnh DDL (tạo bảng, thay đổi bảng, vv), trong khi không có khái niệm trực tiếp về mô hình, chỉ các câu lệnh SQL có thể thực hiện các truy vấn linh hoạt cao (các câu lệnh chọn). các thao tác chèn, cập nhật, xóa cơ bản.

Một cách khác để suy nghĩ về nó là bản chất của SQL cho phép bạn xác định một "mô hình" cho mỗi truy vấn bằng cách chỉ chọn các trường cụ thể cũng như nối các bản ghi từ các bảng có liên quan với nhau.

Trong các hệ thống ORM khác như Ruby on Rails, lược đồ được xác định thông qua các cơ chế ActiveRecord và mô hình là các phương thức bổ sung mà lớp con Mô hình của bạn thêm vào để xác định logic nghiệp vụ bổ sung.

+0

Cảm ơn câu trả lời. Tôi thấy ở một số nơi đối tượng Người dùng vẫn được tạo như thế này và được gọi là 'mô hình' ngay cả khi sử dụng postgres: "var User = sequelize.define ('user', {field: value});" được chuyển vào ứng dụng chính. Đây có phải là định nghĩa giản đồ không? Nguồn là http://sarabinns.com/tag/passport-js-sequelize-postgresql/ – dnv

+1

Phần '{field: value)' là lược đồ. Phần 'Người dùng' là mô hình. –