2014-04-08 15 views
29

Podczas oglądania samouczków często występuje rozróżnienie między schematem a modelem, szczególnie w przypadku mangusty/mongody. Powoduje to, że przeniesienie do PostgreSQL jest nieco mylące, ponieważ "modele" nie wydają się istnieć w tym systemie. Jaka jest różnica między tymi dwoma podejściami?Mongoose: Schema vs Model?

Na przykład, jaki byłby ORM postgres/sql tej linii?

(gambianus i express.js)

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

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

możliwy duplikat [Dlaczego Mongoose ma zarówno schematy i modele?] (Http://stackoverflow.com/questions/9127174/why-does-mongoose-have-bash-schemas-and-models) – JohnnyHK

+0

@JohnnyHK I dałem to przeczytać, ale moje pytanie jest bardziej ukierunkowane na równoważny przepływ pracy postgresql (zamiast dyskusji wyłącznie w sferze Mongoose) – dnv

Odpowiedz

44

W mangusta, schemat przedstawia strukturę danego dokumentu, w całości lub tylko część tego dokumentu. Jest to sposób wyrażania oczekiwanych właściwości i wartości, a także ograniczeń i indeksów. Model definiuje interfejs programowania do interakcji z bazą danych (odczyt, wstawianie, aktualizowanie itp.). Schemat odpowiedzi brzmi: "Jak będą wyglądały dane w tej kolekcji?" a model zapewnia funkcjonalność typu "Czy są jakieś rekordy pasujące do tego zapytania?" lub "Dodaj nowy dokument do kolekcji".

W prostych RDBMS schemat jest implementowany za pomocą instrukcji DDL (tworzenie tabeli, zmiana tabeli itp.), Podczas gdy nie ma bezpośredniej koncepcji modelu, tylko instrukcje SQL, które mogą wykonywać wysoce elastyczne zapytania (instrukcje wyboru), a także podstawowa wstawka, aktualizacja, usuwanie operacji.

Innym sposobem myślenia o tym jest charakter SQL pozwala zdefiniować "model" dla każdego zapytania, wybierając tylko poszczególne pola, a także łącząc rekordy z powiązanych tabel razem.

W innych systemach ORM, takich jak Ruby on Rails, schemat jest definiowany za pomocą mechanizmów ActiveRecord, a model jest dodatkowymi metodami dodawanymi przez podklasę Model, które definiują dodatkową logikę biznesową.

+0

Dzięki za odpowiedź. Widzę w niektórych miejscach obiekt użytkownika jest nadal tworzony w ten sposób i nazywany "modelem" nawet przy użyciu postgres: "var User = sequelize.define (" user ", {field: value});" który jest przekazywany do głównej aplikacji. Czy to po prostu definicja schematu? Źródło to http://sarabinns.com/tag/passport-js-sequelize-postgresql/ – dnv

+1

Część '{pole: wartość)' jest schematem. Część "User" to model. –