2014-04-08 14 views
29

sıklıkla özellikle firavunfaresi/MongoDB ile uğraşan bir şema ve model arasında bir tarif yoktur. Bu, postgresql'ye biraz kafa karıştırıcı bir hale getiriyor, çünkü 'modeller' bu sistem altında görünmüyor. İki yaklaşım arasındaki fark nedir? ÖrneğinMongoose: Schema vs Model? öğreticiler bakarken

, ya bu hattın bir postgres/sql ORM eşdeğer olurdu?

(firavunfaresi ve express.js): firavunfaresi olarak

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

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

olası yinelenen [şemaları ve modelleri hem Gelincik var Neden?] (http://stackoverflow.com/questions/9127174/why-does-mongoose-have-both-schemas-and-models) – JohnnyHK

+0

@JohnnyHK I Bu bir okuma yoluyla verdim, ama benim soru daha sonra eşdeğer postgresql iş akışına yöneliktir (tamamen Mongoose alanında bir tartışmadan ziyade) – dnv

cevap

44

bir şema ya tamamen ya da belgenin bir kısmının, belirli bir dokümanın yapısını temsil eder. Beklenen özelliklerin ve değerlerin yanı sıra kısıt ve endeksleri ifade etmenin bir yolu. Bir model, veritabanıyla etkileşime girmek için bir programlama arabirimini tanımlar (okuma, ekleme, güncelleme, vb.). Şema, "bu koleksiyondaki veriler neye benzeyecek?" ve bir model "Bu sorgu ile eşleşen herhangi bir kayıt var mı?" gibi işlevsellik sağlar. veya "Koleksiyona yeni bir belge ekle".

Düz RDBMS'de, şema DDL deyimleri (tablo oluşturma, tablo değiştirme, vb.) Tarafından uygulanırken, doğrudan model kavramı yokken, yalnızca esnek deyimler (seçim deyimleri) gerçekleştirebilen SQL deyimleri vardır. temel ekleme, güncelleme, işlemleri sil.

düşünmek başka bir yolu da SQL doğası yalnızca belirli alanları seçerek hem de birlikte ilgili tablolardan kayıtları katılarak her bir sorgu için bir "model" tanımlamanızı sağlar olduğunu. Ruby on Rails gibi diğer ORM sistemlerinde

, şema ActiveRecord mekanizmalar üzerinden tanımlanır ve model ek iş mantığı tanımlamak için Model alt sınıf ekler ekstra yöntemler oluşturmaktadır. arasında

+0

Cevabınız için teşekkürler. Bir Kullanıcı nesne hala böyle yaratılır bazı yerlerde görmek ve bir 'model' bile kullanarak postgres seslendi: "var Kullanıcı = sequelize.define ('kullanıcı', {alanı: value});" ana uygulamaya geçirilir. Bu sadece bir şema tanımı mı? Kaynak http://sarabinns.com/tag/passport-js-sequelize-postgresql/ olan – dnv

+1

'{alanı: değeri) 'parçası şemadır. 'Kullanıcı' kısmı modeldir. –