How to obtain inheritance in sequelize models
I am running a Node.js service with sequelize. I have 4 different types of users, all share some of the same attributes like name, password etc. and all have user-role specific attributes.
Currently, I have all 4 models defined as separate models. This gives code duplication and multiple calls to the database if I want to retrieve all users.
How can I obtain a form of inheritance with sequelize?
I would like to achieve something like this:

mysql node.js sequelize.js
add a comment |
I am running a Node.js service with sequelize. I have 4 different types of users, all share some of the same attributes like name, password etc. and all have user-role specific attributes.
Currently, I have all 4 models defined as separate models. This gives code duplication and multiple calls to the database if I want to retrieve all users.
How can I obtain a form of inheritance with sequelize?
I would like to achieve something like this:

mysql node.js sequelize.js
add a comment |
I am running a Node.js service with sequelize. I have 4 different types of users, all share some of the same attributes like name, password etc. and all have user-role specific attributes.
Currently, I have all 4 models defined as separate models. This gives code duplication and multiple calls to the database if I want to retrieve all users.
How can I obtain a form of inheritance with sequelize?
I would like to achieve something like this:

mysql node.js sequelize.js
I am running a Node.js service with sequelize. I have 4 different types of users, all share some of the same attributes like name, password etc. and all have user-role specific attributes.
Currently, I have all 4 models defined as separate models. This gives code duplication and multiple calls to the database if I want to retrieve all users.
How can I obtain a form of inheritance with sequelize?
I would like to achieve something like this:

mysql node.js sequelize.js
mysql node.js sequelize.js
asked Dec 27 '18 at 14:50
OhLongJohnJohnson
51211
51211
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
In order to achieve your ERD above, you can simply Associate each Role model Instructor, Student, Administrator, Janitor to the main User model using the Sequelize Associations, it's very flexible to define foreignKeys, targetKeys and sourceKey, take a look at the Association part of Sequelize documentation over here.
I'm not really sure what specific entities relationship type this would be (meaning belongsTo, belongsToMany, ..etc) but according to your diagram it is a hasOne relationship.
Thanks @Mohdule. I ended up doing as you suggested and defined my foregin keys like this "db.admins.belongsTo(db.users, { foreignKey: "id", targetKey: "id" });"
– OhLongJohnJohnson
2 days ago
You are welcome :), glad you figured it out
– Mohdule
2 days ago
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53946898%2fhow-to-obtain-inheritance-in-sequelize-models%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
In order to achieve your ERD above, you can simply Associate each Role model Instructor, Student, Administrator, Janitor to the main User model using the Sequelize Associations, it's very flexible to define foreignKeys, targetKeys and sourceKey, take a look at the Association part of Sequelize documentation over here.
I'm not really sure what specific entities relationship type this would be (meaning belongsTo, belongsToMany, ..etc) but according to your diagram it is a hasOne relationship.
Thanks @Mohdule. I ended up doing as you suggested and defined my foregin keys like this "db.admins.belongsTo(db.users, { foreignKey: "id", targetKey: "id" });"
– OhLongJohnJohnson
2 days ago
You are welcome :), glad you figured it out
– Mohdule
2 days ago
add a comment |
In order to achieve your ERD above, you can simply Associate each Role model Instructor, Student, Administrator, Janitor to the main User model using the Sequelize Associations, it's very flexible to define foreignKeys, targetKeys and sourceKey, take a look at the Association part of Sequelize documentation over here.
I'm not really sure what specific entities relationship type this would be (meaning belongsTo, belongsToMany, ..etc) but according to your diagram it is a hasOne relationship.
Thanks @Mohdule. I ended up doing as you suggested and defined my foregin keys like this "db.admins.belongsTo(db.users, { foreignKey: "id", targetKey: "id" });"
– OhLongJohnJohnson
2 days ago
You are welcome :), glad you figured it out
– Mohdule
2 days ago
add a comment |
In order to achieve your ERD above, you can simply Associate each Role model Instructor, Student, Administrator, Janitor to the main User model using the Sequelize Associations, it's very flexible to define foreignKeys, targetKeys and sourceKey, take a look at the Association part of Sequelize documentation over here.
I'm not really sure what specific entities relationship type this would be (meaning belongsTo, belongsToMany, ..etc) but according to your diagram it is a hasOne relationship.
In order to achieve your ERD above, you can simply Associate each Role model Instructor, Student, Administrator, Janitor to the main User model using the Sequelize Associations, it's very flexible to define foreignKeys, targetKeys and sourceKey, take a look at the Association part of Sequelize documentation over here.
I'm not really sure what specific entities relationship type this would be (meaning belongsTo, belongsToMany, ..etc) but according to your diagram it is a hasOne relationship.
edited Dec 28 '18 at 0:45
answered Dec 28 '18 at 0:25
Mohdule
176210
176210
Thanks @Mohdule. I ended up doing as you suggested and defined my foregin keys like this "db.admins.belongsTo(db.users, { foreignKey: "id", targetKey: "id" });"
– OhLongJohnJohnson
2 days ago
You are welcome :), glad you figured it out
– Mohdule
2 days ago
add a comment |
Thanks @Mohdule. I ended up doing as you suggested and defined my foregin keys like this "db.admins.belongsTo(db.users, { foreignKey: "id", targetKey: "id" });"
– OhLongJohnJohnson
2 days ago
You are welcome :), glad you figured it out
– Mohdule
2 days ago
Thanks @Mohdule. I ended up doing as you suggested and defined my foregin keys like this "db.admins.belongsTo(db.users, { foreignKey: "id", targetKey: "id" });"
– OhLongJohnJohnson
2 days ago
Thanks @Mohdule. I ended up doing as you suggested and defined my foregin keys like this "db.admins.belongsTo(db.users, { foreignKey: "id", targetKey: "id" });"
– OhLongJohnJohnson
2 days ago
You are welcome :), glad you figured it out
– Mohdule
2 days ago
You are welcome :), glad you figured it out
– Mohdule
2 days ago
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53946898%2fhow-to-obtain-inheritance-in-sequelize-models%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown