How can I implement inheritance for likes with different categories in Objection.js?
Im trying to implement a database design using Objection.js but I don't know how to define an inheritance relationship with multiple categories that are mutually exclusive.
The case in question is as follows: I want to implement likes for posts, comments, and replies. As far as I know, "The most extensible solution is to have just one "base" table, and "inherit" all other tables from it." as stated in another SO question. The idea is to link a like to an entity and for an entity to be either a post, comment or another entity.
User
id PK int
name string
Entity
id PK int
Like
userId int Fk >- User.id
entityId int Fk >- Entity.id
Article
id PK int Fk >- Entity.id
author int FK >- User.id
title string
text string
Comment
id PK int Fk >- Entity.id
articleId int FK >- Article.id
authorId int FK >- User.id
text string
--There can be more entities like reply, image, etc
In Objection.js you implement a relationship as follows:
class Entity extends Model
static tableName = 'entities';
static relationMappings =
Post:
relation: Model.HasOneRelation,
modelClass: Like,
join:
from: 'post.id',
to: 'like.postId'
However if a do that I don't know how to define that it can be also comment or reply. Not only Post.
Is there a way to archive this? If not, should I use another JS library? Should I change my schema to make it work with Objection.js?
Relevant links:
Implementing Comments and Likes in database
http://vincit.github.io/objection.js/#relations
javascript postgresql database-design objection.js
add a comment |
Im trying to implement a database design using Objection.js but I don't know how to define an inheritance relationship with multiple categories that are mutually exclusive.
The case in question is as follows: I want to implement likes for posts, comments, and replies. As far as I know, "The most extensible solution is to have just one "base" table, and "inherit" all other tables from it." as stated in another SO question. The idea is to link a like to an entity and for an entity to be either a post, comment or another entity.
User
id PK int
name string
Entity
id PK int
Like
userId int Fk >- User.id
entityId int Fk >- Entity.id
Article
id PK int Fk >- Entity.id
author int FK >- User.id
title string
text string
Comment
id PK int Fk >- Entity.id
articleId int FK >- Article.id
authorId int FK >- User.id
text string
--There can be more entities like reply, image, etc
In Objection.js you implement a relationship as follows:
class Entity extends Model
static tableName = 'entities';
static relationMappings =
Post:
relation: Model.HasOneRelation,
modelClass: Like,
join:
from: 'post.id',
to: 'like.postId'
However if a do that I don't know how to define that it can be also comment or reply. Not only Post.
Is there a way to archive this? If not, should I use another JS library? Should I change my schema to make it work with Objection.js?
Relevant links:
Implementing Comments and Likes in database
http://vincit.github.io/objection.js/#relations
javascript postgresql database-design objection.js
1
Hi. What is relevant in your links to your design & problem and in what way? Please include everything necessary to a question in it, with anything that is expressible as text as text, and connect it to the rest of your question. (Don't expect readers to go elsewhere or to read a lot then guess what is applicable & why.) What would you like to do in terms of SQL or design (preferably in text not diagram) & what is the problem with "state a single table to join" in terms of if? See also How can you represent inheritance in a database?.
– philipxy
Nov 12 '18 at 20:38
Thanks for the feedback! I made some changes that I think made it better.
– tlalco
Nov 12 '18 at 22:10
1
You don't actually say what is a subtype of what. Also "where you can only choose one" is not clear. (Maybe you are trying to say that the subtypes are mutually exclusive.) Use enough words & sentences to clearly say what you mean. If you know some design method like ER or if you know the relational model or SQL it would be helpful if you described the tables & "relationships" (FKs) you would like. (If not, time to read a textbook on information modeling, the relational model & database design.) (A manual for a design tool, api or language to record designs is not a manual/tutorial on design.)
– philipxy
Nov 12 '18 at 22:33
Added table definitions and relations.
– tlalco
Nov 13 '18 at 5:07
add a comment |
Im trying to implement a database design using Objection.js but I don't know how to define an inheritance relationship with multiple categories that are mutually exclusive.
The case in question is as follows: I want to implement likes for posts, comments, and replies. As far as I know, "The most extensible solution is to have just one "base" table, and "inherit" all other tables from it." as stated in another SO question. The idea is to link a like to an entity and for an entity to be either a post, comment or another entity.
User
id PK int
name string
Entity
id PK int
Like
userId int Fk >- User.id
entityId int Fk >- Entity.id
Article
id PK int Fk >- Entity.id
author int FK >- User.id
title string
text string
Comment
id PK int Fk >- Entity.id
articleId int FK >- Article.id
authorId int FK >- User.id
text string
--There can be more entities like reply, image, etc
In Objection.js you implement a relationship as follows:
class Entity extends Model
static tableName = 'entities';
static relationMappings =
Post:
relation: Model.HasOneRelation,
modelClass: Like,
join:
from: 'post.id',
to: 'like.postId'
However if a do that I don't know how to define that it can be also comment or reply. Not only Post.
Is there a way to archive this? If not, should I use another JS library? Should I change my schema to make it work with Objection.js?
Relevant links:
Implementing Comments and Likes in database
http://vincit.github.io/objection.js/#relations
javascript postgresql database-design objection.js
Im trying to implement a database design using Objection.js but I don't know how to define an inheritance relationship with multiple categories that are mutually exclusive.
The case in question is as follows: I want to implement likes for posts, comments, and replies. As far as I know, "The most extensible solution is to have just one "base" table, and "inherit" all other tables from it." as stated in another SO question. The idea is to link a like to an entity and for an entity to be either a post, comment or another entity.
User
id PK int
name string
Entity
id PK int
Like
userId int Fk >- User.id
entityId int Fk >- Entity.id
Article
id PK int Fk >- Entity.id
author int FK >- User.id
title string
text string
Comment
id PK int Fk >- Entity.id
articleId int FK >- Article.id
authorId int FK >- User.id
text string
--There can be more entities like reply, image, etc
In Objection.js you implement a relationship as follows:
class Entity extends Model
static tableName = 'entities';
static relationMappings =
Post:
relation: Model.HasOneRelation,
modelClass: Like,
join:
from: 'post.id',
to: 'like.postId'
However if a do that I don't know how to define that it can be also comment or reply. Not only Post.
Is there a way to archive this? If not, should I use another JS library? Should I change my schema to make it work with Objection.js?
Relevant links:
Implementing Comments and Likes in database
http://vincit.github.io/objection.js/#relations
javascript postgresql database-design objection.js
javascript postgresql database-design objection.js
edited Nov 13 '18 at 5:05
tlalco
asked Nov 12 '18 at 17:22
tlalcotlalco
486
486
1
Hi. What is relevant in your links to your design & problem and in what way? Please include everything necessary to a question in it, with anything that is expressible as text as text, and connect it to the rest of your question. (Don't expect readers to go elsewhere or to read a lot then guess what is applicable & why.) What would you like to do in terms of SQL or design (preferably in text not diagram) & what is the problem with "state a single table to join" in terms of if? See also How can you represent inheritance in a database?.
– philipxy
Nov 12 '18 at 20:38
Thanks for the feedback! I made some changes that I think made it better.
– tlalco
Nov 12 '18 at 22:10
1
You don't actually say what is a subtype of what. Also "where you can only choose one" is not clear. (Maybe you are trying to say that the subtypes are mutually exclusive.) Use enough words & sentences to clearly say what you mean. If you know some design method like ER or if you know the relational model or SQL it would be helpful if you described the tables & "relationships" (FKs) you would like. (If not, time to read a textbook on information modeling, the relational model & database design.) (A manual for a design tool, api or language to record designs is not a manual/tutorial on design.)
– philipxy
Nov 12 '18 at 22:33
Added table definitions and relations.
– tlalco
Nov 13 '18 at 5:07
add a comment |
1
Hi. What is relevant in your links to your design & problem and in what way? Please include everything necessary to a question in it, with anything that is expressible as text as text, and connect it to the rest of your question. (Don't expect readers to go elsewhere or to read a lot then guess what is applicable & why.) What would you like to do in terms of SQL or design (preferably in text not diagram) & what is the problem with "state a single table to join" in terms of if? See also How can you represent inheritance in a database?.
– philipxy
Nov 12 '18 at 20:38
Thanks for the feedback! I made some changes that I think made it better.
– tlalco
Nov 12 '18 at 22:10
1
You don't actually say what is a subtype of what. Also "where you can only choose one" is not clear. (Maybe you are trying to say that the subtypes are mutually exclusive.) Use enough words & sentences to clearly say what you mean. If you know some design method like ER or if you know the relational model or SQL it would be helpful if you described the tables & "relationships" (FKs) you would like. (If not, time to read a textbook on information modeling, the relational model & database design.) (A manual for a design tool, api or language to record designs is not a manual/tutorial on design.)
– philipxy
Nov 12 '18 at 22:33
Added table definitions and relations.
– tlalco
Nov 13 '18 at 5:07
1
1
Hi. What is relevant in your links to your design & problem and in what way? Please include everything necessary to a question in it, with anything that is expressible as text as text, and connect it to the rest of your question. (Don't expect readers to go elsewhere or to read a lot then guess what is applicable & why.) What would you like to do in terms of SQL or design (preferably in text not diagram) & what is the problem with "state a single table to join" in terms of if? See also How can you represent inheritance in a database?.
– philipxy
Nov 12 '18 at 20:38
Hi. What is relevant in your links to your design & problem and in what way? Please include everything necessary to a question in it, with anything that is expressible as text as text, and connect it to the rest of your question. (Don't expect readers to go elsewhere or to read a lot then guess what is applicable & why.) What would you like to do in terms of SQL or design (preferably in text not diagram) & what is the problem with "state a single table to join" in terms of if? See also How can you represent inheritance in a database?.
– philipxy
Nov 12 '18 at 20:38
Thanks for the feedback! I made some changes that I think made it better.
– tlalco
Nov 12 '18 at 22:10
Thanks for the feedback! I made some changes that I think made it better.
– tlalco
Nov 12 '18 at 22:10
1
1
You don't actually say what is a subtype of what. Also "where you can only choose one" is not clear. (Maybe you are trying to say that the subtypes are mutually exclusive.) Use enough words & sentences to clearly say what you mean. If you know some design method like ER or if you know the relational model or SQL it would be helpful if you described the tables & "relationships" (FKs) you would like. (If not, time to read a textbook on information modeling, the relational model & database design.) (A manual for a design tool, api or language to record designs is not a manual/tutorial on design.)
– philipxy
Nov 12 '18 at 22:33
You don't actually say what is a subtype of what. Also "where you can only choose one" is not clear. (Maybe you are trying to say that the subtypes are mutually exclusive.) Use enough words & sentences to clearly say what you mean. If you know some design method like ER or if you know the relational model or SQL it would be helpful if you described the tables & "relationships" (FKs) you would like. (If not, time to read a textbook on information modeling, the relational model & database design.) (A manual for a design tool, api or language to record designs is not a manual/tutorial on design.)
– philipxy
Nov 12 '18 at 22:33
Added table definitions and relations.
– tlalco
Nov 13 '18 at 5:07
Added table definitions and relations.
– tlalco
Nov 13 '18 at 5:07
add a comment |
0
active
oldest
votes
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%2f53267122%2fhow-can-i-implement-inheritance-for-likes-with-different-categories-in-objection%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
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.
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%2f53267122%2fhow-can-i-implement-inheritance-for-likes-with-different-categories-in-objection%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
1
Hi. What is relevant in your links to your design & problem and in what way? Please include everything necessary to a question in it, with anything that is expressible as text as text, and connect it to the rest of your question. (Don't expect readers to go elsewhere or to read a lot then guess what is applicable & why.) What would you like to do in terms of SQL or design (preferably in text not diagram) & what is the problem with "state a single table to join" in terms of if? See also How can you represent inheritance in a database?.
– philipxy
Nov 12 '18 at 20:38
Thanks for the feedback! I made some changes that I think made it better.
– tlalco
Nov 12 '18 at 22:10
1
You don't actually say what is a subtype of what. Also "where you can only choose one" is not clear. (Maybe you are trying to say that the subtypes are mutually exclusive.) Use enough words & sentences to clearly say what you mean. If you know some design method like ER or if you know the relational model or SQL it would be helpful if you described the tables & "relationships" (FKs) you would like. (If not, time to read a textbook on information modeling, the relational model & database design.) (A manual for a design tool, api or language to record designs is not a manual/tutorial on design.)
– philipxy
Nov 12 '18 at 22:33
Added table definitions and relations.
– tlalco
Nov 13 '18 at 5:07