2012-10-05 189 views
5

Utilizando Node.js y una base de datos similar a SQL, ¿cuáles son mis opciones cuando se trata de implementar el modelo de herencia de bases de datos? Miré a mi alrededor y parece que debido a la popularidad de la base de datos no SQL en Node.js, la herencia de la base de datos se pasa por alto.Modelo de herencia de base de datos con Node.js

Estoy tratando de lograr algo muy simple: ampliar una tabla de usuarios en función de unas pocas reglas comerciales. Para simplificar, me gustaría agregar tablas y clases de Reader y Moderador cuyas propiedades difieran. Esto es algo que sería relativamente fácil de lograr en .NET usando NHibernate. ¿Puedo lograr el mismo resultado sin usar pegar todo en la misma mesa? Si no, ¿cuáles son las mejores alternativas?

Btw, estoy usando Node.js con PostreSQL vía Sequelize.

Respuesta

5

No he visto aún un ORM para bases de datos SQL que admita herencia. Incluso entonces, creo que hay otras oportunidades gracias a la naturaleza de JS que podría disfrutar (estoy seguro):

Usando jugglingdb (el que yo recomendaría), junto con underscore.js (algo que la mayoría de los programadores node.js deberían prestar atención a) que puede hacer algo como lo siguiente:

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 
})); 

Aunque estoy de acuerdo que no es el mismo, no hay razones para considerar este mal :) Creo que es muy similar a JavaScript.

Además, si desea reutilizar métodos/validaciones, puede hacerlo. Solo asignes a ellos (reutiliza las funciones) o si deseas reutilizar un grupo de funciones, agrégalas a un objeto y luego extiende los objetos Reader y Moderator. Por ejemplo ...

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); 

Esto es muy flexible y permite tener relaciones (comportamientos), lo que es ideal para la reutilización horizontal.

+0

Esto suena como una gran idea. ¡Definitivamente estoy intentando esto! –

Cuestiones relacionadas