使用 Node.js 的数据库继承模型

Posted

技术标签:

【中文标题】使用 Node.js 的数据库继承模型【英文标题】:Database inheritance model with Node.js 【发布时间】:2012-09-26 04:14:14 【问题描述】:

使用 Node.js 和类似 SQL 的数据库,在实现数据库继承模型时我有哪些选择?我环顾四周,似乎由于 Node.js 中 noSQL 数据库的流行,数据库继承被忽略了。

我正在尝试完成一件非常简单的事情:根据一些业务规则扩展用户表。为简单起见,我想添加属性不同的 Reader 和 Moderator 表和类。这是使用 NHibernate 在 .NET 中相对容易完成的事情。我可以在不使用将所有内容粘贴在同一张表中的情况下获得相同的结果吗?如果没有,最好的选择是什么?

顺便说一句,我通过 Sequelize 将 Node.js 与 PostreSQL 一起使用。

【问题讨论】:

【参考方案1】:

我还没有看到支持继承的 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);

这非常灵活,并且允许有一个关系(行为),非常适合横向重用。

【讨论】:

这听起来是个好主意。我一定要试试这个!

以上是关于使用 Node.js 的数据库继承模型的主要内容,如果未能解决你的问题,请参考以下文章

Node.js - 如何使用 graphql 获取关联的模型数据?

使用Node.js进行Web开发

使用 ORM Sequelize / node.js 操作数据

使用 Node.js、Handlebars 和 Express 进行模板继承

Node.js Sequelize UUID 主键 + Postgres

转 node.js里面的http模块深入理解