2012-10-05 76 views
5

使用Node.js和一個類似SQL的數據庫,當涉及到實現數據庫繼承模型時,我有什麼選擇?我環顧四周,似乎由於Node.js中noSQL數據庫的流行,數據庫繼承被忽略了。帶Node.js的數據庫繼承模型

我想完成一件非常簡單的事情:根據一些業務規則擴展用戶表。爲了簡單起見,我想添加其屬性不同的Reader和Moderator表和類。這是使用NHibernate在.NET中完成的相對容易的事情。我可以在不使用同一張表中的所有內容的情況下獲得相同的結果嗎?如果不是,最好的選擇是什麼?

順便說一句,我使用Node.js與PostreSQL通過Sequelize。

回答

5

我還沒有看到支持繼承的SQL數據庫的ORM。即使這樣,我相信還有其他感謝的機會,JS的性質,你可能會喜歡(我肯定做):

使用jugglingdb(一個我會建議),加上underscore.js(這是大多數Node.js的程序員應該注意),你可以這樣做以下:

var user_common_properties = { 
    name:   String, 
    bio:   Schema.Text, 
    approved:  Boolean, 
    joinedAt:  Date, 
    age:   Number 
}; 
var User = schema.define('User', user_common_properties); 

var Moderator = schema.define('Moderator', _.extend(user_common_properties, { 
    power : String, 
    level : Number 
})); 
var Reader = schema.define('Moderator', _.extend(user_common_properties, { 
    lurker : Boolean 
})); 

雖然我同意這是不一樣的,沒有理由認爲這種糟糕:)我認爲這是非常的JavaScript等。

此外,如果你想重新使用方法/驗證,你可以!只需將它們分配給它們(重新使用這些函數),或者如果您想重新使用一堆函數,請將它們添加到對象中,然後擴展Reader和Moderator對象。例如...

var repeated_methods = { 
    first : function() { }, 
    second: function() {} 
}; 
//I want to reuse this for both User and Moderator but not for Reader... 
User = _.extend(User, repeated_methods); 
Moderator = _.extend(Moderator, repeated_methods); 

這是非常靈活的,並允許has-a關係(行爲),這對橫向重用很有用。

+0

這聽起來像個好主意。我絕對會試試這個! –